2017-02-08 87 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视图中使其加粗,并且它不会序列化设计器文件中的值。