如何在VisualBasic tableLayoutPanel中放置形状(椭圆形,矩形,线条)?

时间:2015-03-10 03:39:10

标签: visual-studio-2010

听起来像一个愚蠢的问题,但每当我将一个椭圆拖到桌子上时,会弹出一个错误:“无法在'TableLayoutPanel'类型的容器中创建'Shape'类型的组件。有没有办法可以解决这个问题?

2 个答案:

答案 0 :(得分:1)

Shape类需要一个容器,一个ShapeContainer类的实例,当您使用设计器在表单上删除形状时,它是非常不可见的。从技术上讲,你可以从属性窗口顶部的控制选择器组合框中找到它,默认名称为" shapeContainer1"并且根本没有任何属性。此容器类的表面用于绘制形状。

所有这些都是通过自定义设计器完全自动完成的,它确保在将形状从工具箱拖到窗体上时创建ShapeContainer实例。问题是,这个设计师不够聪明,无法处理TableLayoutPanel类。它应该做的是创建一个可以嵌入到TLP的单元格中的ShapeContainer,它不会。相反,它只是放弃并显示消息框。换句话说,你看到微软的程序员已经放弃了这项工作。做正确的事情并不是很简单,很难再次摆脱那些看不见的容器。

只有解决方法是自己编写代码。您可以在表单的构造函数中执行此操作。将LineShape放在上/左表格单元格中的简单示例:

    public Form1() {
        InitializeComponent();
        var line = new Microsoft.VisualBasic.PowerPacks.LineShape() {
            X1 = 0, Y1 = 0, X2 = 50, Y2 = 20
        };
        var container = new Microsoft.VisualBasic.PowerPacks.ShapeContainer();
        container.Shapes.Add(line);
        container.Size = new System.Drawing.Size(50, 20);
        tableLayoutPanel1.Controls.Add(container, 0, 0);
    }

答案 1 :(得分:1)

我知道这是一个老线程...但是为了将来可能会考虑更容易的选项,这是我找到的解决方案:

在您要放置形状的 TablePanelLayout 中插入面板,VisualStudio应允许您将形状放置在新创建的面板中。

祝你好运。