如何在用户控件中的两个控件之间绘制直线?

8
我有一个名为groupControl的用户控件: 它有两个流式布局面板 - 源面板和目标面板。它还有一个按钮。
我有另一个名为item的用户控件。我将在源面板中动态放置N个项目控件,在目标面板中动态放置M个项目控件。
我希望在每个项目控件和groupControl上的按钮之间有直线。
最后,我有一个测试表单MainForm,它也包含一个流式布局面板。我将在MainForm上动态放置X个groupcontrols。
如何在同一groupControl上的每个用户控件项目和按钮之间绘制直线?
3个回答

6

Visual Basic Power Pack包含一个DataRepeater和一些形状(如椭圆形、矩形等),包括一条线。请参阅此链接

它被称为“Visual Basic” Power Pack,但在C#项目中也可以毫不费力地使用。

看看DataRepeater,它不仅可以帮助您将面板填充为自定义控件作为项,而且它包含了您需要在它们之间放置一条线的内容。


谢谢!我也使用DevExpress 10.2和.Net 4.0,可以吗? - spspli
2
没问题。我认为 Visual Basic Power Packs 已经安装在 Visual Studio 2010 中了:请查看 Windows 表单设计器的“Visual Basic PowerPacks”选项卡。 - Larry
它会报错,Add只能接受System.Windows.Forms.Control类型的参数,而不是VB.PowerPacks类型。 - spspli
哦,太糟糕了,抱歉我忘记了这个。尝试使用DataRepeater代替。您可以将控件添加到其中作为模板,并使用数据绑定。通过调整BorderStyle属性并将ItemHeaderVisible设置为false,您可以实现通过线条分隔控件的效果。使用BindingList作为数据源,以便在插入/删除元素时自动更新您的DataRepeaters。 - Larry
太好了!我试图使用graphics.DrawLine(...)连接控件,但由于滚动条的存在,每条线都消失了!问题是如何动态创建LineShapes??非常感谢 - Stavros Afxentis
显示剩余2条评论

3

您需要编辑类似于以下内容以适应正确的起点和终点(pt1pt2),但是……

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);
    }
  }
}

编辑:

如果你有一个名为ShippingForm的表单(就像我上面所做的那样),请前往GUI中的表单事件处理程序,并双击Pant事件以生成空方法存根。 VS的表单GUI


ShippingForm_Paint在哪里? - spspli
那只是你的表格的名字而已。我在我的应用程序表格上测试了这个功能,它被称为ShippingForm。请参见上面的编辑。 - user153923

0

这其实很简单。您可以像使用Canvas一样使用ShapeContainer类。将LineShape的父级设置为ShapeContainer,将ShapeContainer的父级设置为Form


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接