[英]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.