Как нарисовать прямую линию между двумя элементами управления в пользовательском элементе управления? - PullRequest
8 голосов
/ 05 апреля 2011

У меня есть пользовательский элемент управления с именем groupControl: он имеет две панели flowlayout - панель источника и панель назначения.У него также есть кнопка.

У меня есть другой пользовательский элемент управления с именем item.Я буду динамически размещать N элементов управления на исходной панели и M элементов управления на целевой панели.

Я хочу, чтобы между каждым элементом управления и кнопкой на groupControl были прямые линии.

Наконец, у меня есть тестФорма MainForm, она также содержит панель потока.Я динамически наложу X groupcontrols на MainForm.

Как можно нарисовать прямые линии между каждым элементом usercontrol и кнопкой на одном и том же groupControl?

Ответы [ 3 ]

6 голосов
/ 05 апреля 2011

Visual Basic Power Pack содержит DataRepeater и некоторые формы (овал, прямоугольник ...), включая линию.См. эту ссылку .

Он называется «Visual Basic» Power Pack, но его можно использовать в проекте C # без каких-либо хлопот.

Посмотрите на DataRepeater,это не только поможет вам заполнить вашу панель пользовательскими элементами управления в виде элементов, но и содержит то, что вам нужно, чтобы поставить линию между ними.

3 голосов
/ 05 апреля 2011

Вам нужно отредактировать что-то подобное, чтобы соответствовать вашим правильным начальным и конечным точкам (pt1 и pt2), но ...

FlowLayoutPanel flowLayoutPanel1;
FlowLayoutPanel flowLayoutPanel2;

private void ShippingForm_Paint(object sender, PaintEventArgs e) {
  using (Graphics g = e.Graphics) {
    Point pt1 = flowLayoutPanel1.Location;
    Point pt2 = flowLayoutPanel2.Location;
    using (Pen p = new Pen(Brushes.Black)) {
      g.DrawLine(p, pt1, pt2);
    }
  }
}

EDIT:

Если у вас есть форма с именем ShippingForm (как я делал выше), перейдите к обработчикам событий формы в графическом интерфейсе и добавьте двойной щелчок по событию Pant, чтобы создать пустую заглушку метода. VS's GUI of Form

0 голосов
/ 09 августа 2011

Это на самом деле довольно просто.Вы можете использовать класс ShapeContainer так же, как Canvas.Установите для родительского элемента LineShape значение ShapeContainer, а для родительского элемента ShapeContainer значение Form.

.
...