2017-11-18 7 views

答えて

3

DropDownStyleプロパティは、オーバーライドできません。これにより、強制的に行うことのできる量が制限されます。 .NET Frameworkには、プロパティを隠すだけのアプローチがあります。似て:

Private Const DefaultStyle As ComboBoxStyle = ComboBoxStyle.DropDown 

Public Sub New() 
    MyBase.DropDownStyle = DefaultStyle 
End Sub 

<Browsable(False), EditorBrowsable(EditorBrowsableState.Never)> 
<DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> 
Public Overloads Property DropDownStyle As ComboBoxStyle 
    Get 
     Return MyBase.DropDownStyle 
    End Get 
    Set(value As ComboBoxStyle) 
     MyBase.DropDownStyle = DefaultStyle 
    End Set 
End Property 

閲覧可能な属性は、設計者から財産を隠し、EditorBrowsable属性は、テキストエディタからそれを隠すDesignerSerializationVisibilityは、それがのInitializeComponent()メソッドに書き込まないようにしています。

しかし、実際にはComboBoxにキャストしてプロパティ設定ツールをバイパスし、MyBase.DropDownStyleプロパティを任意の値に割り当てたい場合は、クライアントコードを停止しません。 Overloadsの責任は、基本メンバーを隠し、それを上書きしないことのみです。技術的には、CreateParamsをオーバーライドすることでそれを打ち負かすことはできますが、そのプロパティはComboBoxのコードであまりに頻繁に使用されています。これはそれが得られるほど良いです。フレームワークにとって十分です。

+0

異なる値に 'DropDownStyle'設定からクライアントコードを停止するには、' OnDropDownStyleChanged'をオーバーライドして、技術的に戻って ''に続いDropDownStyle'値を変更してしまう 'MyBase.DropDownStyle = DefaultStyle' –

+0

@RezaAghaei を設定することができますドロップダウン。子どものDropDownStyleイベントがトリガされたときに、きれいではない望ましくない副作用を引き起こす可能性があります。 – Makaveli84

+0

@ Makaveli84クライアントコードを使用してDropDownStyleを変更しないように、*既存のソリューションに加えて*あなたは 'OnDropDownStyleChanged'が単に' DropDownStyleChanged'イベントを発生させる責任があることを知っておくべきです。したがって、イベントを発生させることなくオーバーライドすることは安全です。私が言ったことを理解するには、 'DirectCast(derivedComboBox、ComboBox).DropDownStyle = ComboBoxStyle.DropDownList'を試してみてください。 –

関連する問題