2014-12-08 69 views
1

情景如何正確地以這種方式繼承UserControl?

我有一個子類NumericDown這樣的:

Public Class MyNumericUpDown : Inherits NumericUpDown 

    ' More code here that does not matter... 

End Class 

我想編譯成WindowsForms控件庫項目的UserControl有用戶控件的的beneffit調試項目時的屬性網格。

問題

我找不到編譯我NumericDown,因爲我想不破壞自動生成UsercontrolWindowsForms控件庫項目的方式,這意味着,打破了財產網格功能和編譯後的項目有一個最終的異常消息告訴我,我的DLL:doesn't contain any UserControl types(但真的有,我可以將它添加到VS控制工具箱)。

問題

在C#或VB,我怎麼能正常白色的WindowsForms控件庫項目只顯示我的自定義NumericDown沒有鬆動的屬性網格功能?

我希望你能明白我想要的。

我會試着用換句話說:我只想在屬性網格中測試我的NumericUpDown,而不是WindowsForms控件庫項目默認生成的usercontrol。

將它添加到VisualStudio控件工具箱中時,它應該是一個「單元」,但是我得到兩個分離的控件。

CODE:

我沒有什麼更好的展現,因爲我無法找到的信息,開始這樣做。

Public Class UserControl1 : Inherits UserControl 

    Public Sub New() 

     InitializeComponent() 

     ' This is not what I want, 
     ' or at least I think it shouldn't be done as normally like this, 
     ' I only want to use and see my custom NumericUpDown on the property grid, 
     ' not depending on any UserControl ControllCollection. 
     Me.Controls.Add(New MyNumericUpDown) 

    End Sub 

End Class 
+1

沒有必要對你的子類的控件添加到WF控制庫項目 - 他們可以很好的工作沒有用戶控件的開銷。因爲項目類型,Net是「自動生成」UC;你顯然是將你的NUD添加到UserControl中。創建一個「Class Lib」項目並添加您的子類控件以及一些WinForms引用。沒有UserControl的「好處」,許多許多子類控制工作得很好。我不確定你正在談論的「屬性網格」是什麼 - 雖然屬性屬性窗口? – Plutonix 2014-12-08 13:58:14

+0

我知道如何編譯一個按照您所說的方式進行操作而不依賴於UC的控件。我試圖問的是:當你編譯和運行一個用戶控件(WF控件庫項目)時,VisualStudio會在運行時顯示一個控件的屬性網格來測試控件屬性,這就是我想用我的自定義控件所不具備的繼承自WF控制庫項目中的UC,以防可能導致我不知道的情況,謝謝您的評論。 – ElektroStudios 2014-12-08 19:50:51

+0

對不起,我不知道你在說什麼屬性網格(在運行時)。 – Plutonix 2014-12-08 20:55:31

回答

1

Visual Studio附帶的測試應用程序將僅搜索從UserControl派生的控件。如果您希望它能夠查看/測試其他類型,那麼您需要創建一個自定義應用程序。

以下代碼只是概念驗證。實現完整工作應用程序的最簡單方法是簡單地將UserControlTestContainer.exe拖放到反射器等反編譯器上並複製代碼。

  1. 創建一個自定義窗體窗體應用程序並將其命名爲UserControlTestContainer
  2. 創建一個共享的子主。
  3. 取消選中enable application framework並將startup object設置爲sub main
  4. 當你的代碼看起來像我的,建立。
Public Class Form1 

    Public Sub New(Optional ByVal args As String() = Nothing) 
     Me.InitializeComponent() 
     Me.args = New Label With {.Dock = DockStyle.Fill, .Text = If((args Is Nothing), "(null)", String.Join(Environment.NewLine, args))} 
     Me.Controls.Add(Me.args) 
    End Sub 

    <STAThread()> 
    Public Shared Sub Main(Optional ByVal args As String() = Nothing) 
     Application.EnableVisualStyles() 
     Application.Run(New Form1(args)) 
    End Sub 

    Private args As Label 

End Class 
  • 替換位於C:\Program Files (x86)\Microsoft Visual Studio {version}\Common7\IDE與自定義UserControlTestContainer.exe默認UserControlTestContainer.exe
  • 回到windows窗體控件庫,創建一個自定義控件,從Control派生出來並運行。
  • Custom UserControl Test Container

    相關問題