在WinForms中创建模板并将其用作控件

cu6pst1q  于 2022-11-30  发布在  其他
关注(0)|答案(2)|浏览(139)

我是WinForms的新手,我需要一些东西用于一个项目:我正在为一个设备编写一个测试程序。这个设备发送一些关于它自己的数据,我必须在一个标签和一个图表中输出一些关于它的信息。
以下是转折点:该设备可以是双、三或n-uple设备,这意味着我必须输出n个选项卡和n个图表。为此,我希望有一个带有选项卡和图表的“模板”,并在我的winforms窗口中为每个子设备放置一个,一个在另一个下面。您认为这是如何实现的?您有更好的主意吗?
我不知道我是不是很清楚,所以我添加了一张图片来解释我想要什么。(https://i.stack.imgur.com/Nd00g.png)谢谢
我试着在网上搜索winforms中的模板,但没有找到任何符合我想要的。

k4emjkb1

k4emjkb11#

不幸的是,windows窗体是基于继承的。
因此,您无法在中编写新行为,但如果您不介意继承,只需创建一个子窗体,然后使用一个面板作为您的基本模板,您可以在其中添加图表和数据。
然后你可以创建任意多的孩子,一个公关类型,或者你可以组成不同的行为到面板上,因为你喜欢。
我自己更喜欢组合解决方案,因为它至少试图是现代的,但问题是Forms并不是真正为组合而构建的,所以严格地说,最好继续使用继承范式,这样一切都是统一的。
然而,测试在继承上要难得多。所以我想实际上是为了这个而组合。是的。组合,更好。

wz1wpwve

wz1wpwve2#

您可以创建自己的自定义类,继承TabPage并添加任何您想要的子控件。下面是我不久前为tabebed Web浏览器应用编写的一个示例:

Public Class WebBrowserTabPage
    Inherits System.Windows.Forms.TabPage
 
    Private _browser As New WebBrowser
 
    Public ReadOnly Property Browser() As WebBrowser
        Get
            Return Me._browser
        End Get
    End Property
 
    Public Sub New()
        Me._browser.Dock = DockStyle.Fill
        Me.Controls.Add(Me._browser)
    End Sub
 
End Class

这段代码是用VB编写的,但希望原理是清楚的。我可以提供required的C#翻译。然后你可以将该类的示例添加到TabControl中,而不是常规的TabPage中。
如果您只需要一个子控件(听起来好像您只需要一个Chart),就可以开始了。如果您需要多个子控件,则应该先建立具有所有子控件的使用者控件,然后只将该使用者控件的执行严修加入自订TabPage
你也可以通过创建一个自定义的TabControl来添加更多的功能,除非你需要,否则我不会详细说明,但是你可以在标签式web浏览器here上查看我的线程。
下面是上面代码的C#翻译,也做了一些更新。原始代码是15年前写的。

public class WebBrowserTabPage : TabPage
{
    public WebBrowser Browser { get; } = new WebBrowser { Dock = DockStyle.Fill };

    public WebBrowserTabPage()
    {
        Controls.Add(Browser);
    }
}

相关问题