Member 14125168 Ответов: 1

Как нарисовать линию между двумя точками с помощью перемещения мыши и мыши вниз


Я хочу провести линию между двумя точками с помощью перемещения мыши и второго раза
Я щелкаю мышкой, линия будет нарисована и начинаю рисовать новую линию. Я пробовал использовать G.прозрачный(цвет фона) и Refresh(), но когда каждый раз, когда я переместите мышь линии появляются и исчезают. Как я могу решить эту проблему?

Что я уже пробовал:

пространство имен projebaslangıcLine2
{
общественности частичного класс form1 : форма
{

private bool mouse_is_down = false;
private bool key_space = false;
частный bool line_selected = ложь;
Список<point> start_points;
Список<point> finish_points;
начать собственный смысл ;
частная точка финиша;
Графика g;

открытый form1()
{
метод InitializeComponent();
BackColor = Цвет.Черный;
g = CreateGraphics();
start_points = новый список<точка>();
finish_points = новый список<точка>();

}

частный недействительными методе form1_load(объект отправителя, EventArgs в электронной)
{

}

private void Form1_MouseDown(отправитель объекта, MouseEventArgs e)
{
if (line_selected == true && start.X == 0)
{
mouse_is_down = истина;
start.X = e.X;
начало.Г = е.Г;

}
еще
{
finish.X = e.X;
заканчивать.Г = е.Г;
начальная точка.Добавить(начать);
finish_points.Добавить(готово);

Аннулировать();
start.X = e.X;
начало.Г = е.Г;
}

}

private void Form1_MouseMove(отправитель объекта, MouseEventArgs e)
{

если (mouse_is_down == правда и усилитель; & line_selected == правда)
{
г. Прозрачный(Цвет Фона);
г. DrawLine(Ручки.Белый, старт, новая точка(электронная.Х,Эл.Г));
silenenleri_ciz();

}

}

private void Form1_Paint(отправитель объекта, PaintEventArgs e)
{
using (var p = new Pen(Color.Белый))
{
for (int x = 0; x < start_points.Count; x++)
{
г. DrawLine(п start_points[х], finish_points[х]);

}
}
}

частный недействительными silenenleri_ciz()
{

for (int x = 0; x < start_points.Count; x++)
{

g.DrawLine(новое перо(цвет.Белый), start_points[x], finish_points[x]);
}
}

private void Form1_KeyDown(отправитель объекта, KeyEventArgs e)
{
if (e.KeyCode == ключи.Космос)
{
key_space = истина;
}
если (key_space == правда &&усилителя; электронные.Данные KeyCode == Ключи.Л)
{

mouse_is_down = ложь;
секиленкомут.строка текста";
line_selected = истина;

}

}

private void Form1_KeyUp(отправитель объекта, KeyEventArgs e)
{
key_space = ложь;
}

частная secilenKomut_TextChanged недействительным(объект отправителя, EventArgs в электронной)
{

}

частная secilenKomut_Click недействительным(объект отправителя, EventArgs в электронной)
{
секиленкомут.Остановка табуляции = истина;
}

}
}

Gerry Schmitz

Почему вы используете "перемещение мыши"? Вам нужно всего 2 точки (т. е. "щелчки"), чтобы нарисовать линию.

Member 14125168

Потому что я хочу видеть угол линии при перемещении мыши

1 Ответов

Рейтинг:
1

Richard MacCutchan

Вы должны сделать все рисование внутри в перегрузке формы OnPaint метод. Видеть Контроль.Метод OnPaint(PaintEventArgs) (System.Окна.Формы) | Microsoft Docs[^].


Maciej Los

5ed!