c# - 如何访问 winforms 设计器中的继承控件

标签 c# winforms visual-studio-2008

我正在制作一些控件,它们必须具有相同的外观和一些共同的行为,尽管它们适用于不同类型的输入。所以我创建了一个继承自 UserControl 的 BaseClass,我所有的控件都继承自 BaseClass。

但是,如果我在设计器中为 BaseClass 添加控件,例如 TableLayoutPanel,则在设计继承类时无法访问它们。我看到了 TableLayoutPanel,但即使他受到“保护”,我也无法修改它或通过设计器将控件放入其中。我可以通过代码访问它,但我不想失去使用设计器的能力。

现在,我只是从 BaseClass 中删除了所有控件,在每个继承类中添加了布局和所有公共(public)控件,然后使用引用在 BaseClass 中操作它们。但这根本不能让我满意。有没有办法让设计器使用继承的 protected 成员控件?

环境:C#、.NET 3.5、Visual Studio 2008

编辑以回答 SLaks 的建议。我尝试设置一个属性,虽然我不习惯使用它们,但它似乎不起作用。这是我试过的代码:

    public partial class UserControl1 : UserControl
    {
            public UserControl1()
            {
                    InitializeComponent();
            }

            public TableLayoutPanel TableLayoutPanel1
            {
                    get { return tableLayoutPanel1;}
                    set { tableLayoutPanel1 = value;}
            }
    }

    public partial class UserControl2 : UserControl1
    {
            public UserControl2()
            {
                    InitializeComponent();
            }
    }

最佳答案

当您尝试从带有设计器的继承控件访问基础控件中声明的 TableLayoutPanel 时,您正在使用 WinForms 中称为“视觉继承”的功能。

不幸的是 TableLayoutPanel 不支持视觉继承: http://msdn.microsoft.com/en-us/library/ms171689%28VS.80%29.aspx

这就是 TableLayoutPanel 在继承的控件中显示为阻塞的原因。

关于c# - 如何访问 winforms 设计器中的继承控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1046328/

相关文章:

c# - RedirectStandardOutput 和批处理文件中的暂停命令

c# - 可以作为参数传递给 POST 方法的对象的最大大小

c# - 将对数据库所做的更改存储在 Entity Framework 中

c# - 以编程方式将 DNS 设置为 'Obtain automatically'

c# - 如何将位图图像转换为 jpeg2000

c# - SQLite 自动递增问题

使用 ApplicationSettingsBase 的 C# 设置 - 漫游和通用

c# - 控制自定义属性

c# - 是否可以在 bool 上使用对象初始化器?

visual-studio - 从 Visual Studio 2008 中删除 SourceSafe 集成