在tablelayoutpanel单元格c#.NET中添加其他形状旁边的形状

时间:2017-02-17 08:22:04

标签: c# .net winforms tablelayoutpanel

我是.NET应用程序中的新手,我正在尝试使用TableLayoutPanel和两个圈创建Label

Image

为此,我正在创建带有标签和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个项目并在单元格的左侧添加一个边距来设置它们的位置。

我一直在寻找,但我还没有找到如何执行此操作。有谁知道吗?非常感谢你!

1 个答案:

答案 0 :(得分:0)

Ellipse是一个WPF元素,不能直接托管在Windows窗体控件上,因为它不是Control

Windows窗体中的WPF Ellipse 相当于什么?

在Windows窗体中,要在表单上创建形状,可以使用Visual Studio PowerPacks Controls,如Shape组件的Line,Oval和Rectangle。

您可以在ShapeForm上放置Panel并使用它们。但即使使用PowerPack Shape您也无法使用代码直接在Shape中托管Control

注意1:在使用设计器时,您可以在Shape上删除Form,但对于TableLayoutPanel,您无法删除Shape设计师TableLayoutPanel

注意2:在尝试使用代码添加ShapeControls集合时,您会看到无法将其添加到Controls集合中!

使用设计器,为什么我可以在 Form Panel 中托管 Shape ,但不能在 TableLayoutPanel < / EM>

实际上,当您在表单上放置形状时,设计人员会创建一个拥有ShapeContainer的不可见ShapeShape将在ShapeContainer的表面上绘制,ShapeContainer托管在FormPanel上。这是设计师的伎俩。

对于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方法派生即可创建自定义椭圆控件。