2017-02-08 104 views
0

我創建了一些自定義控件,但仍在掙扎掌握界面。 對於均勻性除了創建自定義proerties我也想改變我試過的自定義控件的一些基本屬性下面的代碼更改自定義控件屬性的默認值

Protected Overrides Sub OnControlAdded(e As ControlEventArgs) 
    Me.AutoCompleteMode = AutoCompleteMode.Suggest 
    Me.AutoCompleteSource = AutoCompleteSource.ListItems 
    MyBase.OnControlAdded(e) 
End Sub 

這可是不工作的時候我把窗體上的自定義控件,我想解決的謊言添加屬性並覆蓋屬性。

我發現C#的答案,這一點,但沒有成功理解/對vb.net

+4

您不會將任何控件添加到組合框,因此您的代碼不會觸發。將該代碼放入構造函數中。 – LarsTech

+0

@LarsTech,當表單/控件啓動時,我不會尋找啓動數據,而是在設計時將控件的默認值(在我們的例子中,默認情況下默認爲「無」)更改爲其他默認值。 –

+0

由於您要設置繼承的屬性,因此您的選擇是有限的 - 實際的默認值已經在基本控件中設置。最簡單的方法是在構造函數中將其設置爲您想要的值;在控件實現'ISupportInitialize'的情況下,你可以在'EndInit'中執行。這假設它是一個自定義控件而不是用戶控件 – Plutonix

回答

0

翻譯它,因爲這些屬性是不可重寫,請嘗試使用Shadows修飾符來代替:

Public Class MyComboBox 
    Inherits ComboBox 

    Public Sub New() 
    Me.AutoCompleteMode = AutoCompleteMode.Suggest 
    Me.AutoCompleteSource = AutoCompleteSource.ListItems 
    End Sub 

    <DefaultValue(AutoCompleteMode.Suggest)> _ 
    Public Shadows Property AutoCompleteMode As AutoCompleteMode 
    Get 
     Return MyBase.AutoCompleteMode 
    End Get 
    Set(value As AutoCompleteMode) 
     MyBase.AutoCompleteMode = value 
    End Set 
    End Property 

    <DefaultValue(AutoCompleteSource.ListItems)> _ 
    Public Shadows Property AutoCompleteSource As AutoCompleteSource 
    Get 
     Return MyBase.AutoCompleteSource 
    End Get 
    Set(value As AutoCompleteSource) 
     MyBase.AutoCompleteSource = value 
    End Set 
    End Property 

End Class 

請注意,雖然DefaultValue屬性可能不會做你認爲它的作用:它實際上並沒有設置該屬性的默認值。它用於告訴PropertyGrid屬性的默認值是什麼,如果它匹配,它將不會在PropertyGrid視圖中使其加粗,並且它不會序列化設計器文件中的值。