Алгоритмическое мышление при решении задач (на примере языка C#). Шамшев А.Б - 104 стр.

UptoLike

Составители: 

104
public Form1() {
InitializeComponent();
//создаем панель, на которой будет происходить рисование
Panel drawPanel = new Panel();
//говорим, что она должна заполнять всю форму
drawPanel.Dock = DockStyle.Fill;
//добавляем обработчик рисования
drawPanel.Paint += new PaintEventHandler(drawPanel_Paint);
//добавляем обработчик нажатий кнопки мыши
drawPanel.MouseClick += new
MouseEventHandler(drawPanel_MouseClick);
//и добавляем ее на форму
this.Controls.Add(drawPanel);
}
void drawPanel_MouseClick(object sender, MouseEventArgs e) {
//если нажата не правая кнопка мыши,
if (e.Button != MouseButtons.Right) {
//то выходим
return;
}
//создаем новый квадрат
var newF = new Square(e.X, e.Y, 10);
//и добавляем его в список квадратов
figureList.Add(newF);
}
public List<Square> figureList = new List<Square>();
void drawPanel_Paint(object sender, PaintEventArgs e) {
for (int i = 0; i < figureList.Count; i++) {
figureList[i].draw(e.Graphics);
}
}
}
Однако, если запустить программу, будет видно, что квадраты не
появляются. Это связано с тем, что по логике мы сказали, как надо рисовать, но
не сказали, когда надо рисовать. Для вызова рисования необходимо вызвать
метод Invalidate у панели. А следовательно, drawPanel надо вынести из
функции. Поэтому следующий шаг в решении задачи будет:
public partial class Form1 : Form {
public Panel drawPanel;
public Form1() {
InitializeComponent();
//создаем панель, на которой будет происходить рисование
drawPanel = new Panel();
//говорим, что она должна заполнять всю форму
drawPanel.Dock = DockStyle.Fill;
//добавляем обработчик рисования
drawPanel.Paint += new PaintEventHandler(drawPanel_Paint);
//добавляем обработчик нажатий кнопки мыши