我是.NET应用程序中的新手,我正在尝试使用TableLayoutPanel
和两个圈创建Label
:
为此,我正在创建带有标签和2个圆圈的对象,从上面(我有TableLayoutPanel)我试图将这些元素添加到单元格中:
this.cellTableLayoutPanel.Controls.Add(this.devList[rowCount].devNameLabel, 0, rowCount);
this.cellTableLayoutPanel.Controls.Add(this.devList[rowCount].circle_in, 0, rowCount);
元素:(标签devNameLabel,System.Windows.Shapes.Ellipse circle_in)
我无法弄清楚如何执行此操作,因为它不允许我将圆圈添加到表格单元格中。我想添加3个项目并在单元格的左侧添加一个边距来设置它们的位置。
我一直在寻找,但我还没有找到如何执行此操作。有谁知道吗?非常感谢你!
答案 0 :(得分:0)
Ellipse
是一个WPF元素,不能直接托管在Windows窗体控件上,因为它不是Control
。
Windows窗体中的WPF Ellipse 相当于什么?
在Windows窗体中,要在表单上创建形状,可以使用Visual Studio PowerPacks Controls,如Shape
组件的Line,Oval和Rectangle。
您可以在Shape
或Form
上放置Panel
并使用它们。但即使使用PowerPack Shape
您也无法使用代码直接在Shape
中托管Control
。
注意1:在使用设计器时,您可以在Shape
上删除Form
,但对于TableLayoutPanel
,您无法删除Shape
设计师TableLayoutPanel
!
注意2:在尝试使用代码添加Shape
到Controls
集合时,您会看到无法将其添加到Controls
集合中!
使用设计器,为什么我可以在 Form 或 Panel 中托管 Shape ,但不能在 TableLayoutPanel < / EM> 强>
实际上,当您在表单上放置形状时,设计人员会创建一个拥有ShapeContainer
的不可见Shape
。 Shape
将在ShapeContainer
的表面上绘制,ShapeContainer
托管在Form
或Panel
上。这是设计师的伎俩。
对于TableLayoutPanel
,此功能未在设计器中实现。
如何使用代码添加Shape到Controls集合?
您可以将Shape
添加到ShapeContainer
,然后将Panel
添加到TableLayoutPanel
:
var container = new ShapeContainer();
var oval = new OvalShape(container) { Width = 20, Height = 20 };
this.tableLayoutPanel1.Controls.Add(container, 0, 0);
还有其他选择吗?
是的,作为替代方案,您只需从Control
和覆盖OnPaint
方法派生即可创建自定义椭圆控件。