Color не содержит определения для Pen - C#

Узнай цену своей работы

Формулировка задачи:

Color не содержит определения для pen, но ведь я подключил Drawing
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Drawing.Drawing2D;
  5. using System.Globalization;
  6. using System.Linq;
  7. using System.Threading;
  8. using System.Windows.Forms;
  9. namespace thest
  10. {
  11. public partial class CalcBio : Form
  12. {
  13. #region Свойства
  14. private readonly List<List<PointF>> _points = new List<List<PointF>>
  15. {
  16. new List<PointF>(),
  17. new List<PointF>(),
  18. new List<PointF>()
  19. };
  20. private Bitmap _bmp;
  21. private int _days;
  22. private float ScaleX => pictureBox1.Width / 60f;
  23. private int Days
  24. {
  25. set
  26. {
  27. _days = value;
  28. hScrollBar1.Visible = _days > 60;
  29. hScrollBar1.Maximum = value - 60;
  30. }
  31. }
  32. #endregion
  33. public CalcBio()
  34. {
  35. InitializeComponent();
  36. ResizeRedraw = true;
  37. DoubleBuffered = true;
  38. dateBirth.Value = DateTime.Now.AddMonths(-4);
  39. SizeChanged += (sender, args) => BuildGraph();
  40. Load += (sender, args) => BuildGraph();
  41. }
  42. private void birthDateDtp_ValueChanged(object sender, EventArgs e)
  43. {
  44. Days = (DateTime.Now - dateBirth.Value).Days;
  45. GetPoints();
  46. }
  47. private void BuildGraph()
  48. {
  49. GetPoints();
  50. DrawImage();
  51. pictureBox1.Invalidate();
  52. }
  53. private void tableLayoutPanel2_Paint(object sender, PaintEventArgs e)
  54. {
  55. }
  56. private void buttonToClose_Click(object sender, EventArgs e)
  57. {
  58. Close();
  59. }
  60. private void buildGraphbutton_Click(object sender, EventArgs e)
  61. {
  62. BuildGraph();
  63. }
  64. //рисование координатной оси
  65. private void DrawAxis(Graphics g)
  66. {
  67. g.TranslateTransform(0, g.ClipBounds.Height / 2);
  68. //ось
  69. var end = new PointF(g.ClipBounds.Right, 0);
  70. g.DrawLine(Color.Gray.(1.5f), new PointF(), end);
  71. //стрелка
  72. g.FillPath(Brushes.DarkGray, GetArrow(new Point(), end));
  73. //подписи к оси
  74. for (var i = 5; i < 60; i += 5)
  75. {
  76. var text = string.Format("{0} дн.", i + hScrollBar1.Value);
  77. var size = g.MeasureString(text, Font);
  78. var pt = new PointF(i * ScaleX, 2);
  79. g.DrawLine(Color.DarkGray.Pen(), pt.X, pt.Y, pt.X, pt.Y - 5);
  80. pt.X -= size.Width / 2;
  81. g.DrawString(text, Font, SystemBrushes.ActiveCaptionText, pt);
  82. }
  83. }
  84. //рисование графиков
  85. private void DrawImage()
  86. {
  87. if (_bmp != null)
  88. {
  89. _bmp.Dispose();
  90. if (_days <= 0) return;
  91. }
  92. var maxX = _points.Select(l => l.Max(p => p.X)).Max();
  93. _bmp = new Bitmap((int)maxX, pictureBox1.Height);
  94. //максимальное значение в трех графиках по Y
  95. var maxY = _points.Select(l => l.Max(p => p.Y)).Max();
  96. var minY = _points.Select(l => l.Min(p => p.Y)).Min();
  97. var scaleY = _bmp.Height * 0.95f / (maxY - minY);
  98. using (var g = Graphics.FromImage(_bmp))
  99. {
  100. g.TranslateTransform(0, _bmp.Height / 2f);
  101. g.ScaleTransform(1, scaleY);
  102. g.DrawCurve(Color.Red.Pen(1 / scaleY), _points[0].ToArray());
  103. g.DrawCurve(Color.Green.Pen(1 / scaleY), _points[1].ToArray());
  104. g.DrawCurve(Color.Blue.Pen(1 / scaleY), _points[2].ToArray());
  105. }
  106. }
  107. //функция
  108. private static float func(int i, int P)
  109. {
  110. return (float)Math.Sin(2 * Math.PI * i / P) * 100;
  111. }
  112. //рисование отрезка со стрелкой
  113. //start Начало отрезка
  114. //end Конец отрезка
  115. //h Раствор стрелки
  116. //l Длина стрелки
  117. private static GraphicsPath GetArrow(PointF start, PointF end, float h = 7, float l = 30)
  118. {
  119. var gp = new GraphicsPath();
  120. //вектора
  121. var v = new PointF(end.X - start.X, end.Y - start.Y);
  122. //длина
  123. var len = (float)Math.Sqrt(v.X * v.X + v.Y * v.Y);
  124. //нормированный вектор
  125. var norm = new PointF(v.X / len, v.Y / len);
  126. //отступаем на длину стрелки
  127. var pt = new PointF(end.X - l * norm.X, end.Y - l * norm.Y);
  128. //нормали для раствора стрелки
  129. var n1 = new PointF(-norm.Y * h / 2 + pt.X, norm.X * h / 2 + pt.Y);
  130. var n2 = new PointF(norm.Y * h / 2 + pt.X, -norm.X * h / 2 + pt.Y);
  131. gp.StartFigure();
  132. gp.AddLine(n1, end);
  133. gp.AddLine(end, n2);
  134. return gp;
  135. }
  136. // Точки графика
  137. private void GetPoints()
  138. {
  139. _points[0].Clear();
  140. _points[1].Clear();
  141. _points[2].Clear();
  142. for (var i = 0; i < _days; i++)
  143. {
  144. _points[0].Add(new PointF(i * ScaleX, func(i, 23)));
  145. _points[1].Add(new PointF(i * ScaleX, func(i, 28)));
  146. _points[2].Add(new PointF(i * ScaleX, func(i, 33)));
  147. }
  148. }
  149. private void hScrollBar1_Scroll(object sender, ScrollEventArgs e)
  150. {
  151. pictureBox1.Invalidate();
  152. }
  153. private void pictureBox1_Paint(object sender, PaintEventArgs e)
  154. {
  155. if (_bmp == null)
  156. return;
  157. DrawImage();
  158. //смещение графика по скролу
  159. var scroll = hScrollBar1.Visible ? hScrollBar1.Value : 0;
  160. e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
  161. e.Graphics.DrawImage(_bmp, -scroll * ScaleX, 0);
  162. DrawAxis(e.Graphics);
  163. }
  164. }
  165. }

Решение задачи: «Color не содержит определения для Pen»

textual
Листинг программы
  1. g.DrawCurve(new Pen(Color.Red), ...);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы