Пустое окно

Введение в Visual Studio C# 2010 Express:

0) После запуска VC# 2010 Express в главном меню выбираем папку для хранения данных проектаTools → Options → check lower left checkbox: Show all Settings → Projects and Solutions → Visual Studio projects location: → C:\temp

1) В Main Menu VC# 2010 Express выбираемFile → New Project... → Installed Templates: Windows Forms Application

Вводим имя: intro1
[OK]
Появляется окно Form1.cs[Design].

2) Сотрите ненужные файлыForm1.Designer.cs Program.cs. Это можно сделать через окно Solution Explorer.

3) Кликните правой кнопкой мыши на Form1. Откроется контекстное меню. Кликните на View Code.
Вы увидите код, созданный автоматически при создании проекта для окна Form1.cs. Сотрите этот код полностью.

4) Напишите в полностью очищенном окне следующие четыре строчки кода:
public class Form1 : System.Windows.Forms.Form

static void Main() { System.Windows.Forms.Application.Run( newForm1() ); }
}

5) Кликните Debug в MainMenu. Откроется подменю. Кликните на Start Without Debugging CtrlF5. Мини-программа автоматически скомпилируется и запустится. Обратите внимание на окно ErrorList-в нижней части главного окна VisualStudio.

Наша программа стартует как самостоятельное окно, состоящее из трех частей:
1. MainFrame с голубым титульным полем (Caption);
2. три системные кнопки Minimize, Maximize, Close;
3. тонкая рамка с четырьмя подвижными сторонами и углами, изменяющими размеры окна при их передвижении мышью. Этот функционал полностью прописан в классе System.Windows.Forms.Form и доступен для использования в вашей первой C# программе.
Необходимо внести изменения в установки VisualStudio
1. В главном меню VisualC# 2010: Tools-> Options....
3. Появится окно Options. Переключитесь на опцию Projects and Solutions.
4. Кликните на General
5. Все три пути должны указывать на C:\temp .
6. Закройте окно кнопкой OK.
Запишитеданныепроекта: Main Menu в VS 2010: File → Save all иминимизируйтеокно Visual Studio.
Запуститепрограмму File Explorer. Перейдите в папку C:\temp\intro1\bin\Release или, если там ничего нет, в папку C:\temp\intro1\bin\Debug.
Для понимания того, что intro1.exe является отдельной программой запустите intro1.exe. Вы можете запустить параллельно множество инстанций intro1.exe. Минимизируйте FileExplorer.
Важно: Всегда закрывайте все запущенные инстанции приложения intro1 перед тем, как внести изменения в код и скомпилировать новую программу! Если есть сомнения все ли инстанции закрыты, запустите системную программу TaskManagerнажав комбинацию клавиш Ctrl+Alt+Del, и если в списке запущенных процессов найдется intro1.exe– удалите его.

DrawString: Hallo World

Если вы не видите окно с кодом, кликните в окне SolutionExplorer на Form1.cs, окно с кодом появится на переднем плане.
Сотрите весь написанный до этого код в окне Form1.cs и напишите следующий код:

using System;
using System.Drawing;
using System.Windows.Forms; 
public class Form1 : Form
{
  [STAThread] static void Main() 
  { 
    Application.Run( new Form1() ); 
  }
  Font arial18 = new Font( "Arial", 18 );
  Brush blackbrush = SystemBrushes.ControlText;  

  protected override void OnPaint( PaintEventArgs e )
  {
    Graphics g = e.Graphics;
    g.DrawString( "Hello world !", arial18, blackbrush, 0, 0 );
  }
}

Кликните Debug в главном меню, в подменю выберете Start Without Debugging Ctrl F5.
Программа снова будет автоматически скомпилирована и запущена.

Закройте эту примитивную версию и добавьте конструктор public Form1():

using System;
using System.Drawing;
using System.Windows.Forms;
 
public class Form1 : Form

  Font arial18 = new Font( "Arial", 18 );
  Brush blackbrush = SystemBrushes.ControlText;

  
[STAThread] static void Main() 
  { 
     Application.Run( new Form1() ); 
  }

  public Form1()
  {
    BackColor  = Color.White;
    Text       = "intro1";
    SetStyle( ControlStyles.ResizeRedraw, true );
    StartPosition = FormStartPosition.Manual;
    Top    =  50;
    Left   =  50;
    Width  = 800;
    Height = 600;
  }

  protected override void OnPaint( PaintEventArgs e )
  {
    Graphics g = e.Graphics;
    String s0 = "Hello world, here is intro1 !";
    g.DrawString( s0, arial18, blackbrush, 0, 0 );
  }
}

Кликните Debug в главном меню, в подменю выберете Start Without Debugging Ctrl F5.
Программа снова будет автоматически скомпилирована и запущена.
Попробуйте поиграть со значениями стартовой позиции и размерами окна, другими строками, шрифтом (например CourierNew), другими цветами (например Color.Blue, Color.Green) и другими позициями текста.
Важно: Если во время написания кода вы ошиблись в синтаксисе, то при компиляции появится сообщение в виде MessageBox: There were build errors...  В нижней части VisualStudio появится окно со списком ошибок и предупреждений ErrorList. Перейдите в начало списка ошибок (игнорируйте предупреждения). 
Двойной клик на описание ошибки откроет окно с кодом и переведет текстовой курсор на место найденной ошибки. Найдите ошибку (иногда ошибка находится не в указанной строчке, а в предыдущих строчках, если там не хватает запятой или точки с запятой). Игнорируйте следующие ошибки (они могут быть связанными с первой) и скомпилируйте код снова. Повторяйте процесс пока все ошибки не будут исправлены и ваша программа не запустится автоматически.

Рисуем размеры окна цветным текстом

Версия 2: Закройте программу intro1 (если она была запущена).

Сотрите в заголовке класса Form1() обе строчки Font arial18 = new Font("Arial", 18); и Brush blackbrush = SystemBrushes.ControlText; и замените их на:

  Font  arial18    = new Font( "Arial", 18 );
  Font  arial16    = new Font( "Arial", 16 );
  Font  courier14  = new Font( "Courier New", 14 );
  Brush blackbrush = SystemBrushes.ControlText;
  Brush redbrush   = new SolidBrush( Color.Red );
  Brush whitebrush = new SolidBrush( Color.White );
  Pen   blackpen   = new Pen( Color.Black, 4 );

Сотрите старую функцию
protected override void OnPaint(...) и напишите новую:
 
  protected override void OnPaint( PaintEventArgs e )

  { //Version 2 **********************************
    Graphics g = e.Graphics;
    Rectangle cr = ClientRectangle;
    String s0  = "Hello world, here is intro1 !";
    String s1  = "Change the size of your window by dragging a corner !";
    String s2w = "Form  : Width = " +    Width.ToString();
    String s3w = "Client: Width = " + cr.Width.ToString();
    String s2h = "  Height= " +    Height.ToString();
    String s3h = "  Height= " + cr.Height.ToString();
    g.DrawString( s0       , arial18  , blackbrush, 0,  0 );
    g.DrawString( s1       , arial16  , redbrush  , 0, 20 );
    g.DrawString( s2w + s2h, courier14, blackbrush, 0, 40 );
    g.DrawString( s3w + s3h, courier14, blackbrush, 0, 60 );
  }
Кликните Debug в главном менюв подменю выберете Start Without Debugging Ctrl F5.
Программа снова будет автоматически скомпилирована и запущена. Если нет, смотрите окно ошибок внизу основного окна среды VS2010.

"left", "right", "top", "bottom"

Версия 3: Закройте программу intro1 (если она была запущена).

Допишите шесть строчек в функции protected override void OnPaint(...) сразу после последней уже написанной строчкой кода, но перед фигурной скобкой, закрывающей код функции ...OnPaint(...):

//Version 3 ***************************************************
Point mid = new Point( cr.Width/2, cr.Height/2 );
g.DrawString( "left" ,arial16, blackbrush, 0 , mid.Y );
g.DrawString( "right" ,arial16, blackbrush, cr.Width-50, mid.Y );
g.DrawString( "top" ,arial16, blackbrush, mid.X , 0 );
g.DrawString( "bottom",arial16, blackbrush, mid.X , cr.Height-30 );

Кликните Debug в главном менюв подменю выберете Start Without Debugging Ctrl F5.

Line, Rectangle, Ellipse

Версия 4: Закройте программу intro1 (если она была запущена).

Допишите восемь строчек в функции protected override void OnPaint(...) сразу после последней уже написанной строчкой кода, но перед фигурной скобкой, закрывающей код функции ...OnPaint(...):

    //Version 4 ***************************************************
    g.DrawLine( blackpen, 0, 0, cr.Width, cr.Height );
    g.DrawLine( blackpen, cr.Width, 0, 0, cr.Height );
    Int32 w5 = cr.Width  / 5;
    Int32 h5 = cr.Height / 5;
    g.FillRectangle( whitebrush, w5, h5, 3 * w5, 3 * h5 );
    g.DrawRectangle( blackpen  , w5, h5, 3 * w5, 3 * h5 );
    g.DrawEllipse  ( blackpen  , w5, h5, 3 * w5, 3 * h5 );

Кликните Debug в главном менюв подменю выберете Start Without Debugging Ctrl F5.

Стрелки случайных цветов рисуют звезду лучами случайной длины

Версия 5: Закройте программу intro1 (если она была запущена).

Создайте графический объект типа Pen в заголовке класса public class Form1 : Form прямо под строкой Pen blackpen = new Pen( Color.Black, 4 );:

  Pen   randompen  = new Pen( Color.Black, 20 );

Допишите код в конце функции protected override void OnPaint(...) , как вы это делали в предыдущих версиях 3 и 4:

    //Version 5 ***************************************************

    Int16 i, nn = 120;
    Int32 red, green, blue;
    randompen.EndCap = System.Drawing.Drawing2D.LineCap.DiamondAnchor;
    Point[] splash = new Point[nn];
    Double arcus_1 = 2.0 * Math.PI / nn;
    Double arcus_i, factor, sinus, cosinus;
    Double radius_x = 1.35 * w5;
    Double radius_y = 1.35 * h5;
    Random random = new Random();
    for ( i=0; i < nn; i++ )
    {
      red
   = random.Next( Byte.MaxValue );
      green = random.Next( Byte.MaxValue );
      blue  = random.Next( Byte.MaxValue );
      randompen.Color = Color.FromArgb( red, green, blue );
      factor = Math.Max( 0.25, random.NextDouble() );
      arcus_i = arcus_1 * i;
      cosinus = radius_x * factor * Math.Cos( arcus_i );
      sinus   = radius_y * factor * Math.Sin( arcus_i );
      g.DrawLine( randompen, mid.X, mid.Y, mid.X + (Int32)cosinus, mid.Y + (Int32)sinus );
      splash[i].X = mid.X + (Int32)(cosinus * 0.8);
      splash[i].Y = mid.Y + (Int32)(  sinus * 0.8);
    }

Кликните
 Debug в главном менюв подменю выберете Start Without Debugging Ctrl F5.

Заливка 

Версия 6: Закройте программу intro1 (если она была запущена).

Допишите следующие две строчки в функции protected override void OnPaint(...) внутри цикла:

    //Version 6 ***************************************************

    g.FillClosedCurve( redbrush, splash );

    g.DrawString( "splash !", arial18, whitebrush, mid.X - 40, mid.Y - 9 );

Кликните Debug в главном менюв подменю выберете Start Without Debugging Ctrl F5.
Попробуйте потянуть за края окна.

Анимация

Версия 7: Закройте программу intro1 (если она была запущена).

Допишите следующие две строчки в функции protected override void OnPaint(...) под строчкой g.DrawString( "splash !", arial18, whitebrush, mid.X - 40, mid.Y - 9 );, но внутри цикла:

    //Version 7 ***************************************************

    System.Threading.Thread.Sleep( 100 ); //Wait 100 milliseconds.

    Invalidate(); //Ask the operating system to raise the Paint event again.

Кликните Debug в главном менюв подменю выберете Start Without Debugging Ctrl F5.
Попробуйте потянуть края окна.

Дополнительные задания

Кликните в главном меню Visual Studio Help -> View Help. Кликните папку Index и вбейте в поле фильтров .NET Framework. Затем перейдите в поле поиска и наберите последовательно ключевые слова: DrawString, DrawLine, Random, FillClosedCurve, Pen, Brush и прочее. Вы получите статьи, поясняющие назначение, синтаксис и примеры использования соответствующих объектов и методов. Прочтите описание всех использованных в этой работе методов. 
Закройте  Visual Studio, запустите Explorer, сотрите полностью директорию C:\temp\intro1.
Снова запустите Visual Studio и создайте туже программу еще раз и повторяйте процесс, пока не сможете создать аналогичную программу с нуля без описания.
Попробуйте раз личные варианты программы (под разными названиями  Intro2, Intro3 и т.д.), например цветные штрихи горизонтально, параллельно, перпендикулярно, цветные прямоугольники и эллипсы в случайных координатах и т.д.