Я хочу нарисовать линию с помощью мыши (в интерактивном режиме), я использовал C# и WinForm, строка должна появляться в любое время от начальной точки (когда мышь нажимает на панель) до текущее положение мыши, точно так же, как рисование линии в Paint.Рисование строки с помощью мыши в панели
но код производит много строк, я знаю, почему, но я не знаю, как преодолеть эту проблему
Вот мой код:
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Graphics g;
Pen myPen = new Pen(Color.Red);
Point p = new Point();
bool flag = false;
private void panel1_MouseDown(object sender, MouseEventArgs e)
{
flag = true;
p = e.Location;
}
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
if (flag)
{
g = panel1.CreateGraphics();
myPen.Width = 3;
Point p2 = new Point();
p2 = e.Location;
g.DrawLine(myPen, p, p2);
}
}
private void panel1_MouseUp(object sender, MouseEventArgs e)
{
flag = false;
}
}}
Любая помощь ? я хочу нарисовать много строк и максимально упростить код!
Я мало знаю о C# рисунке, но я думаю, проблема в том, что вы не обновляете свой холст перед тем, как рисовать новую строку. – rendon
Многие, многие пороки CreateGraphics(). Другой здесь, вы рисуете новую строку, но никогда не стираете старую. Вызовите Invalidate() и используйте событие Paint для рисования. –
@rendon Ok проблема решена, но есть еще одна проблема, когда я рисую новую строку, предыдущая строка исчезает !! – HforHisham