繁体   English   中英

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

[英]Create a template in WinForms and use it as a control

我是 WinForms 的新手,我需要一个项目的东西:我正在为一个设备编写一个测试程序。 该设备发送一些关于它自己的数据,我必须在选项卡和图表中向 output 发送一些关于它的信息。

这是一个转折点:该设备可以是双重、三重或 n 重设备,这意味着我必须 output n 个选项卡和 n 个图表。 为此,我想要一个带有选项卡和图表的“模板”,并在我的 winforms window 中为每个子设备放置一个,一个在另一个下面。你认为这怎么可能? 你有更好的主意吗?

我不知道我是否很清楚所以我添加了一张图片来解释我想要的。( https://i.stack.imgur.com/Nd00g.png )谢谢

我试图在 web 中搜索 winforms 中的模板,但没有找到适合我想要的东西。

您可以创建自己的自定义 class 继承TabPage并添加您想要的任何子控件。 这是我前段时间为标签式 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 中,但希望原则是清楚的。 我可以提供C#所需的翻译。 然后,您可以将该 class 的实例添加到TabControl而不是常规TabPage

如果您只需要一个子控件 - 听起来您只需要一个Chart - 那么您可以使用 go。如果您需要多个子控件,那么您应该首先创建一个包含所有子控件的用户控件,然后只添加一个实例该用户控件到自定义TabPage

如果需要,您还可以通过创建自定义TabControl添加更多功能。 除非您需要,否则我不会 go 详细说明,但您可以在此处的标签式 web 浏览器上查看我的线程。

这是上面代码的 C# 翻译,也有一些更新。 原文写于将近 15 年前。

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

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

好吧,不幸的是 windows Forms 是基于 inheritance 的。

所以你不能在其中编写新的行为,但如果你不介意继承,只需创建一个子窗体,然后使用一个面板作为你的基本模板,你可以在其中添加图表和数据。

然后您可以根据需要创建任意数量的子项,一个 pr 类型,或者您可以根据需要在面板上组合不同的行为。

我自己更喜欢组合解决方案,因为它至少试图变得现代,但问题是 Forms 并不是真正为组合而构建,所以严格来说最好继续 inheritance 范例,所以一切都是统一的。

但是,在 inheritance 上进行测试要困难得多。所以我实际上想要组合。 是的。 组成,更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM