Вызов функции, которая включает PaintEventArgs при нажатии кнопки
Извините, если об этом уже спрашивали.
Я работал над простой игрой connect 4 в формах Windows C#, так как раньше я не занимался графикой. Для этого мне нужна программа для рисования кругов при нажатии кнопки, однако я не знаю, как вызвать функцию, чтобы сделать это.
public void printToken(PaintEventArgs pe, int x)
{
Graphics g = pe.Graphics;
Pen blue = new Pen(Color.Blue);
Pen red = new Pen(Color.Red);
Rectangle rect = new Rectangle(50 + ((x-1) * 100), 50, 50, 50);
g.DrawEllipse(blue, rect);
}
private void button1_Click(object sender, EventArgs e)
{
printToken(null, 1);
}
Нуль на месте - это просто заполнитель, так как очевидно, что он не будет работать.
Любая помощь приветствуется.
2 ответа
Как правило, в приложении Windows Forms, где вы хотите сделать пользовательский рисунок, вы либо рисуете прямо на Form
или же PictureBox
в Paint
обработчик события или создать подкласс Control
в котором вы переопределяете OnPaint
метод. в Paint
обработчик события или OnPaint
, вы рисуете все (т.е. не только один круг, но все круги). Затем, когда ваша базовая структура данных изменяется, указывая, что вам нужно перекрасить, вы вызываете Invalidate()
на элементе управления, который помечает его как нуждающийся в перерисовке, и на следующем проходе цикла обработки событий ваш Paint
обработчик событий будет запущен или ваш OnPaint
метод будет вызван. В рамках этого метода вы будете иметь PaintEventArgs
возражать вам нужно, чтобы получить Graphics
объект, с помощью которого можно сделать ваш рисунок. Вы не хотите "рисовать один раз и забыть" (например, когда нажата кнопка), потому что есть все виды вещей, которые могут привести к необходимости перекрасить ваш элемент управления. Посмотрите этот вопрос и ответьте для более подробной информации об этом.
Изменить: вот некоторые руки в ответ на ваш комментарий. (Это будет комментарий, но он слишком длинный.)
Если я предположу на данный момент, что вы начинаете с пробела Form
в Visual Studio Windows Forms Designer самый быстрый способ начать работу - просто выбрать Form
и на панели свойств VS нажмите кнопку на панели инструментов молнии, чтобы просмотреть события формы. Прокрутите вниз до Paint
событие и дважды щелкните в любом месте в пустом пространстве справа от метки. Это будет связать Paint
обработчик события для формы и переход к вновь добавленному методу в файле кода формы. Использовать PaintEventArgs
объект называется e
сделать свой рисунок. Затем, если вам нужно изменить то, что рисуется при нажатии какой-либо кнопки, в вашем обработчике клика измените данные, которые определяют, что будет нарисовано (например, позиции и цвета игровых фигур), и, когда вы закончите, вызовите Invalidate()
,
Если вы добавите в свою форму UserControl, представляющий один чип, переопределите метод OnPaint и поместите код раскраски в это событие, то объект Graphics не будет иметь значение null при возникновении события Paint.
Чтобы начать рисовать UserControl, либо вызовите метод Refresh, либо метод InvalidateRectangle - либо запустите метод OnPaint.
Обязательно сначала вызовите иерархию классов в OnPaint, чтобы убедиться, что фон объекта рисуется первым:
protected override void OnPaint(PaintEventArgs e) {
base.OnPaint(e);
Graphics g = e.Graphics;
Pen blue = new Pen(Color.Blue);
Pen red = new Pen(Color.Red);
Rectangle rect = new Rectangle(50 + ((x-1) * 100), 50, 50, 50);
g.DrawEllipse(blue, rect);
}