在C#ToolBox中在另一个内部导出两个扩展控件

时间:2017-05-02 06:47:56

标签: c# winforms controls

我的类库中有两个控件,一个名为TextBox,另一个是Panel,我可以在ToolBox中以不同的方式导出它们但我想要的不是导出两个不同的控件,而是希望我的文本框在面板中并派生出面板所以它包含面板和文本框。这样做时我遇到了一个问题。 Panel可以在Toolbox中轻松使用,但我在Panel中创建的文本框对象不可见。谁能告诉我这件事是否可以实现?

public class TextBoxPanel :Panel
{
    TextBoxPanel()
    {
        IpTextBox ip = new IpTextBox();
    }

    protected override void OnPaint(PaintEventArgs e)
    {
    }

    public class IPField : TextBox
    {
        protected override void OnClick(EventArgs e)
        {

        }
    }
}

1 个答案:

答案 0 :(得分:0)

您无法从多个基类扩展。您从Panel派生的直觉是正确的,因为您需要TextBox内的Panel

最大的问题是你为什么“需要”从TextBox派生出来?如果您只需要在新控件中使用TextBox,那么只需将其添加到Panel即可。

如果TextBox通过您希望从新TextBoxPanel公开的API提供其他功能,那么我建议采取以下措施:

public interface ICoolStuff
{
   public String HelloWorld();
}

public class TextBox : Control, ICoolStuff
{
    // *snip*
}

public class TextBoxPanel : Panel, ICoolStuff
{
    public string HelloWorld()
    {
        return this.textbox.HelloWorld();
    }
}

如果您的文本框提供的功能不依赖于文本框本身,那么将它分成完全不同的类会更好