BrowsableAttribut reicht nicht, Hilfe

12/06/2009 - 10:19 von Marko | Report spam
Hallo,

Ich hab zu einem eigenem DatumUserControl eine neue Eigenschaft hinzugefügt
(DatumN), mein Problem ist, dass der Designer die Datum-Eigenschaft und die
DatumN-Eigenschaft im Formular_InitializeComponent einbaut. Dadurch wird die
DatumN-Eigenschaft ungünstigerweise 2 mal aufgerufen. Die Datum-Eigenschaft
muss aber aus Kompatibilitàtsgründen drin bleiben.

Kann ich die Datum-Eigenschaft mit einem Attribut aus dieser
InitializeComponent-Geschichte ausschließen? Das BrowsableAttribut klappt nur
für das Property-Fenster.

<System.ComponentModel.Category("Verhalten"), _
System.ComponentModel.Browsable(False)> _
Public Property Datum() As Date
Get
Return datum_.GetValueOrDefault
End Get
Set(ByVal Value As Date)
DatumN = Value
End Set
End Property

<System.ComponentModel.Category("Verhalten")> _
Public Property DatumN() As Date?
Get
Return datum_
End Get
Set(ByVal Value As Date?)
If Parent IsNot Nothing Then
Dim e = New DateChangingEventArgs(Value, datum_)

RaiseEvent BeforeDateChanged(Me, e)

If Not e.Cancel Then
datum_ = e.NewDate

SetText()
Refresh()

RaiseEvent AfterDateChanged(Me, New EventArgs)
End If
End If
End Set
End Property


Me.dtbxWoche.Datum = New Date(2009, 3, 13, 0, 0, 0, 0)
Me.dtbxWoche.DatumN = New Date(2009, 3, 13, 0, 0, 0, 0)
 

Lesen sie die antworten

#1 Elmar Boye
12/06/2009 - 11:05 | Warnen spam
Hallo Marko,

"Marko" schrieb...
Ich hab zu einem eigenem DatumUserControl eine neue Eigenschaft hinzugefügt
(DatumN), mein Problem ist, dass der Designer die Datum-Eigenschaft und die
DatumN-Eigenschaft im Formular_InitializeComponent einbaut. Dadurch wird die
DatumN-Eigenschaft ungünstigerweise 2 mal aufgerufen. Die Datum-Eigenschaft
muss aber aus Kompatibilitàtsgründen drin bleiben.



Was Du suchst wàre
http://msdn.microsoft.com/de-de/lib...ibute.aspx

Kann ich die Datum-Eigenschaft mit einem Attribut aus dieser
InitializeComponent-Geschichte ausschließen?



Wobei eine "richtige" Kompatibiltàt dann auch dahin ist, da die
Eigenschaft beim Anfassen des Codes verschwindet.

Das BrowsableAttribut klappt nur für das Property-Fenster.



Mit http://msdn.microsoft.com/de-de/lib...ibute.aspx
verschwindet es auch in der Intellisense Anzeige.

<System.ComponentModel.Category("Verhalten")> _



Hier kannst Du auch "Behavior" verwenden, dann passt es auf
englischem wie deutschem VS, da es intern übersetzt wird.

Public Property DatumN() As Date?
Get
Return datum_
End Get
Set(ByVal Value As Date?)
If Parent IsNot Nothing Then
Dim e = New DateChangingEventArgs(Value, datum_)

RaiseEvent BeforeDateChanged(Me, e)



Tue Dir selbst einen Gefallen und halte Dich an die Konventionen
für Eigenschaftsereignisse. Dort sollte Before/After _nicht_ verwendet
werden (auch wenn das so manch ein Komponentenhersteller bis heute
nicht kapiert hat), sondern EigenschaftChanging und EigenschaftChanged,
hier als
DatumNChanging
und
DatumNChanged

Siehe http://msdn.microsoft.com/en-us/library/ms182238(VS.80).aspx

Gruß Elmar

Ähnliche fragen