Я хочу нарисовать прямоугольник на форме на C #. Я прочитал и нашел эту статью. Доступны ли какие-либо образцы или учебные пособия? Статья оказалась не очень полезной.
Как нарисовать прямоугольник на C # с помощью мыши
Ответы (2)
Статья, которую вы связали, похоже, написана на C ++, что может объяснить, почему она вам не сильно помогла.
Если вы создаете события для MouseDown и MouseUp, у вас должны быть две угловые точки, необходимые для прямоугольника. Оттуда нужно рисовать на форме. System.Drawing. *, Вероятно, должен стать вашей первой остановкой. Ниже приведены ссылки на несколько руководств:
Рисование с графикой в WinForms с использованием C #
Нарисуйте прямоугольник с помощью Winforms (StackOverflow)
Программирование графики с использованием C #
Вам понадобятся 3 функции и переменные:
private Graphics g;
Pen pen = new System.Drawing.Pen(Color.Blue, 2F);
private Rectangle rectangle;
private int posX, posY, width, height;
Во-вторых, вам нужно сделать событие нажатия мыши:
private void pictureCrop_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
posX = e.X;
posY = e.Y;
}
}
В-третьих, вам нужно реализовать событие мыши вверх:
private void pictureCrop_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Left)
return;
if (e.X > posX && e.Y > posY) // top left to bottom right
{
width = Math.Abs(e.X - posX);
height = Math.Abs(e.Y - posY);
}
else if (e.X < posX && e.Y < posY) // bottom right to top left
{
width = Math.Abs(posX - e.X);
height = Math.Abs(posY - e.Y);
posX = e.X;
posY = e.Y;
}
else if (e.X < posX && e.Y > posY) // top right to bottom left
{
width = Math.Abs(posX - e.X);
height = Math.Abs(posY - e.Y);
posX = e.X;
}
else if (e.X > posX && e.Y < posY) // bottom left to top right
{
width = Math.Abs(posX - e.X);
height = Math.Abs(posY - e.Y);
posY = e.Y;
}
g.DrawImage(_bitmap, 0, 0);
rectangle = new Rectangle(posX, posY, width, height);
g = pictureCrop.CreateGraphics();
g.DrawRectangle(pen, rectangle);
}
И чтобы убедиться, что при изменении размера или перемещении формы прямоугольник будет там:
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Graphics graph = e.Graphics;
graph.DrawImage(_bitmap, 0, 0);
Rectangle rec = new Rectangle(posX, posY, width, height);
graph.DrawRectangle(pen, rec);
}