Необхідно малювати label від місця, де натискається ЛКМ, і до моменту відпускання. Коли я протягую мишу в право-вниз, то все працює. Але я вирішила ускладнити задачу і додати можливість малювати у протилежному напрямку, тобто вліво-вверх, і вже при протягуванні label не зʼявляється. Виводила значення width, height (у іншу label), то вони нульові (коли протягувати вліво-вверх), але коли потім мишку знову тягнути вниз-вправо, то малюється, але координати початку зміщені до тої точки, де була мишка востаннє під час руху вверх-вліво.
В чому може бути проблема?
▼Прихований текст
public partial class Form4 : Form
{
int start_x;
int start_y;
int end_x;
int end_y;
Label label;
bool draw = false;
public Form4()
{
InitializeComponent();
start_x = 0;
start_y = 0;
end_x = 0;
end_y = 0;
}
private Label CreateLabel(int s_x, int s_y, int e_x, int e_y)
{
Label label = new Label();
if (s_x < e_x && s_y < e_y)
{
label.Location = new Point(s_x, s_y);
label.Width = e_x - s_x;
label.Height = e_y - s_y;
}
else if(s_x > e_x && s_y > e_y)
{
label.Location = new Point(e_x, e_y);
label.Width = s_x - e_x;
label.Height = s_y - e_y;
}
Random rand = new Random();
label.BackColor = Color.FromArgb(rand.Next(255), rand.Next(255), rand.Next(255));
return label;
}
private void Form4_MouseDown(object sender, MouseEventArgs e)
{
start_x = e.X;
start_y = e.Y;
label = CreateLabel(start_x, start_y, start_x, start_y);
draw = true;
this.Controls.Add(label);
}
private void Form4_MouseMove(object sender, MouseEventArgs e)
{
if (draw)
{
// calculate new location and size
int new_start_x=start_x, new_start_y=start_y;
int width, height;
end_x = e.X;
end_y = e.Y;
if (end_x < start_x)
{
new_start_x = end_x;
}
if (end_y < start_y)
{
new_start_y = end_y;
}
width = Math.Abs(start_x - end_x);
height = Math.Abs(start_y - end_y);
start_x = new_start_x;
start_y = new_start_y;
// draw resized label
label.Location = new Point(start_x, start_y);
label.Width = width;
label.Height = height;
}
}
private void Form4_MouseUp(object sender, MouseEventArgs e)
{
draw = false;
}
}