簡體   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