F3NA0


Черепашья графика и C#
**********************

    -- Как мне нарисовать кружок и линию на picturebox?
    -- Лучший способ НЕ рисовать кружок и линию на picturebox!
       Он не предназначен для этого.

    http://stackoverflow.com/questions/2729751
         /how-do-i-draw-a-circle-and-line-in-the-picturebox

Правило 0. Хочу получать подсказки на каждом шагу (autocomplete),
           но пользоваться новейшими технологиями.

Отсюда вывод:

  Выбираю C#

На этапе 0 пишем только в песочницу ( // ПИШИ СЮДА ..... // АДЮС ИШИП),
чужой код не трогаем.

Правило 1. Говори собеседнику на том языке, который ты знаешь плохо,
           а он хорошо. Coбеседник должен отвечать на том языке, который
           он знает плохо, а ты хорошо.

           Из психологии поведения в космосе.

Отсюда последовательность:

  Level 0 -- Умею писать работающий код.
  Level 1 -- Умею читать работающий код, написанный кем-то другим.
  Level F -- Умею починить неработающий код, написанный кем-то другим.
             Умею усовершенствовать код, написанный кем-то другим.

Правило 2. Если в языке имеется штатная возможность сделать что-либо,
           никто не запрещает написать свой вариант (в учебных целях).

1. Распаковать Portables ..
   (nelus.tpt.edu.ee -> Download -> Portables.. )
   на диск С в корневой каталог (С:\).

2. Запустить TCCLE. Латиницей написать C#, нажать клавишу Enter.

3. Создать новый проект типа "Windows Application" имя "turtle".

4. Заменить содержимое MainForm.cs на следующее (от ---> до <---).

--->

  using System;
  using System.Drawing;
  using System.Windows.Forms;
  using System.Reflection;

  namespace turtle
  {
      public partial class MainForm : Form
      {
          Graphics g;
          Pen pen;
          private int x, y;

          public MainForm()
          {
              InitializeComponent();
              x = y = 0;
              g = this.CreateGraphics();
              pen = new Pen( Color.Black, 5);
          }

          public void moveto(int ax, int ay)
          {
              x = ax < 0 ? 0 : ax > this.Width ? this.Width : ax;
              y = ay < 0 ? 0 : ay > this.Height ? this.Height : ay;
          }

          public void lineto(int ax, int ay)
          {
              int vx = ax < 0 ? 0 : ax > this.Width ? this.Width : ax;
              int vy = ay < 0 ? 0 : ay > this.Height ? this.Height : ay;

              g.DrawLine(pen, x, y, x = vx, y = vy);
          }

          void MainFormPaint(object sender, PaintEventArgs e)
          {
              // ПИШИ СЮДА
              moveto(20, 20);
              lineto(200, 200);
              moveto(200, 20);
              lineto(20, 200);
              // АДЮС ИШИП
          }
      }
  }

<---

Свой код писать между строк

  // ПИШИ СЮДА
  ...
  // АДЮС ИШИП

вместо строк примера

  moveto(20, 20);
  lineto(200, 200);
  moveto(200, 20);
  lineto(20, 200);

Примечание: SharpDevelop 5.1, показать MainForm.cs режим Design View.
            В окне Properties, закладка Events, установить

  Appearance
    Paint [MainFormPaint |v]


Карандаши. Имена цветов.
------------------------

    "work pens -- рабочие штаны для мастерской."

    http://www.the-village.ru

Замечание: Похоже поисковик Google (и не только) способен отыскивать
разумные решения на запросы типа:

  "c# list color names", первый же ответ содержит готовый пример --

    Type colorType = typeof(System.Drawing.Color);
    // We take only static property to avoid properties
    // like Name, IsSystemColor ...
    PropertyInfo[] propInfos = colorType.GetProperties(
        BindingFlags.Static |
        BindingFlags.DeclaredOnly |
        BindingFlags.Public
    );
    foreach (PropertyInfo propInfo in propInfos) {
      Console.WriteLine(propInfo.Name);
    }

  "PropertyInfo", искал "using что?", первый ответ
  PropertyInfo Class (System.Reflection) - MSDN - Microsoft

  "PropertyInfo.GetValue()", искал "как использовать для текущего цвета"
  четвертый ответ:

  propertyInfo.GetValue(this, null) should work.

Напишу в песочницу

  // ПИШИ СЮДА
  Type colorType = typeof(System.Drawing.Color);
  int i = 10;
  PropertyInfo[] propInfos = colorType.GetProperties(
      BindingFlags.Static |
      BindingFlags.DeclaredOnly |
      BindingFlags.Public
  );
  foreach (PropertyInfo propInfo in propInfos) {
      pen = new Pen( (Color)propInfo.GetValue( this, null), 5);
      g.DrawLine(pen, i, 10, i, 500);
      i+=5;
  }
  // АДЮС ИШИП

Ответ: Обнаружена большая коробка цветных карандашей
       (propInfo.Name, подарочный набор)

AliceBlue, AntiqueWhite, Aqua, Aquamarine, Azure, Beige, Bisque,
Black, BlanchedAlmond, Blue, BlueViolet, Brown, BurlyWood, CadetBlue,
Chartreuse, Chocolate, Coral, CornflowerBlue, Cornsilk, Crimson, Cyan,
DarkBlue, DarkCyan, DarkGoldenrod, DarkGray, DarkGreen, DarkKhaki,
DarkMagenta, DarkOliveGreen, DarkOrange, DarkOrchid, DarkRed,
DarkSalmon, DarkSeaGreen, DarkSlateBlue, DarkSlateGray, DarkTurquoise,
DarkViolet, DeepPink, DeepSkyBlue, DimGray, DodgerBlue, Firebrick,
FloralWhite, ForestGreen, Fuchsia, Gainsboro, GhostWhite, Gold,
Goldenrod, Gray, Green, GreenYellow, Honeydew, HotPink, IndianRed,
Indigo, Ivory, Khaki, Lavender, LavenderBlush, LawnGreen, LemonChiffon,
LightBlue, LightCoral, LightCyan, LightGoldenrodYellow, LightGreen,
LightGray, LightPink, LightSalmon, LightSeaGreen, LightSkyBlue,
LightSlateGray, LightSteelBlue, LightYellow, Lime, LimeGreen, Linen,
Magenta, Maroon, MediumAquamarine, MediumBlue, MediumOrchid,
MediumPurple, MediumSeaGreen, MediumSlateBlue, MediumSpringGreen,
MediumTurquoise, MediumVioletRed, MidnightBlue, MintCream, MistyRose,
Moccasin, NavajoWhite, Navy, OldLace, Olive, OliveDrab, Orange,
OrangeRed, Orchid, PaleGoldenrod, PaleGreen, PaleTurquoise,
PaleVioletRed, PapayaWhip, PeachPuff, Peru, Pink, Plum, PowderBlue,
Purple, Red, RosyBrown, RoyalBlue, SaddleBrown, Salmon, SandyBrown,
SeaGreen, SeaShell, Sienna, Silver, SkyBlue, SlateBlue, SlateGray,
Snow, SpringGreen, SteelBlue, Tan, Teal, Thistle, Tomato, Turquoise,
Violet, Wheat, White, WhiteSmoke, Yellow, YellowGreen

Ссылки
------

  http://www.bobpowell.net/picturebox.htm
  http://www.bobpowell.net
