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

UptoLike

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

105
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);
//и вызываем перерисовку панели
drawPanel.Invalidate();
}
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);
}
}
}
После этого квадратики стали отображаться на форме. Это является
несомненным прогрессом. Но не полным решением задачи. По условию задачи
нам надо «таскать» квадратики мышкой.
Для того, что бы «таскать» квадратик мышкой, пользователь должен:
1. Нажать левую кнопку мыши;
2. Двигать мышку с нажатой левой кнопкой мыши;
3. Отпустить кнопку мыши.
Логично
предположить, что еще надо ответить на вопроскакой из
множества квадратиков пользователь сейчас «таскает»? С учетом того, что они
хранятся в списке, индекс элемента в нем однозначно характеризует квадратик.
Так же логично предположить, что пользователь может не «таскать»
квадратик (например, он нажал кнопку мыши не на квадратике), и эту
ситуацию
надо как-то отличать. Если индекс «таскаемого» элемента будет
равен -1, то это будет означать, что пользователь не «таскает» квадратик.
Так же очевидно, что когда пользователь отпускает левую кнопку мыши,
это означает, что он больше не «таскает» квадратик.
Предположим, что пользователь нажал на область, которая принадлежит
сразу двум квадратикам (например, они «налезают
» друг на друга). Тогда надо
«таскать» тот, который расположен «сверху». Т. е. тот, который был нарисован
последним. Поэтому проход по списку квадратиков надо организовывать от