zur Laufzeit ändern?

20/02/2009 - 16:57 von Thomas Hübner | Report spam
Hi NG,

kann man auf irgendeine Art das <BrowsableAttribute> zur laufzeit
setzen? Ich will erreichen das unter bestimmten Voraussetzungen eine
Property nicht im PropertyGrid angezeigt wird.

Danke und Gruß,
Thomas
 

Lesen sie die antworten

#1 Peter Götz
20/02/2009 - 19:58 | Warnen spam
Hallo Thomas,

kann man auf irgendeine Art das <BrowsableAttribute>
zur laufzeit setzen?



Zur Laufzeit nicht ohne Weiteres.

Ich will erreichen das unter bestimmten Voraussetzungen eine
Property nicht im PropertyGrid angezeigt wird.



Ich rate mal, Du willst in Deinem PropertyGrid nun doch lieber
den DatePicker für Deine Datumswerte haben.

Hier nochmal das um das <BrowsableAttribute> erweiterte
Beispiel aus meinem Posting zu Deiner gestrigen
PropertyGrid-Frage.

'/// Code in einem leeren Formmodul (Form1)
Imports System.ComponentModel
Public Class Form1
Private WithEvents mPG As PropertyGrid
Private WithEvents mButton1 As Button
Private mTC As TestClass

Private Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load

CreateControls()

'mTC = New TestClass(1, "Fritz", DBNull.Value)
mTC = New TestClass

mPG.SelectedObject = mTC
End Sub

Private Sub mPG_PropertyValueChanged _
(ByVal s As Object, _
ByVal e As PropertyValueChangedEventArgs _
) Handles mPG.PropertyValueChanged

mPG.SelectedObject = mPG.SelectedObject
End Sub

Private Sub mButton1_Click _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles mButton1.Click

Dim strBuffer As String
If mTC.DBDatum Is DBNull.Value Then
strBuffer = "DBNull.Value"
Else
strBuffer = mTC.DBDatum.ToString
End If

MsgBox _
(strBuffer, _
MsgBoxStyle.Information, _
"DBDatum")

End Sub

Private Sub CreateControls()
mPG = New PropertyGrid
With mPG
.Font = New Font("Arial", 12)
.SetBounds _
(10, 10, _
Me.ClientSize.Width - 20, _
Me.ClientSize.Height - 70)

.Anchor = _
AnchorStyles.Left Or _
AnchorStyles.Top Or _
AnchorStyles.Right Or _
AnchorStyles.Bottom

End With
Me.Controls.Add(mPG)

mButton1 = New Button
With mButton1
.SetBounds _
(Me.ClientSize.Width - 120, _
mPG.Bottom + 10, _
110, 40)

.Anchor = _
AnchorStyles.Right Or _
AnchorStyles.Bottom

.Text = "Show DBDatum"
End With
Me.Controls.Add(mButton1)
End Sub

Friend Class TestClass
Private mID As Integer
Private mName As String
Private mDatum As Date

Public Sub New()
mID = 0
mName = ""
mDatum = New Date()
End Sub

Public Sub New _
(ByVal ID As Integer, _
ByVal Name As String, _
ByVal Datum As Object)
mID = ID
mName = Name
SetDatum(Datum)
End Sub

Public Property ID() As Integer
Get
Return mID
End Get
Set(ByVal value As Integer)
mID = value
End Set
End Property

Public Property Name() As String
Get
Return mName
End Get
Set(ByVal value As String)
mName = value
End Set
End Property

Public Property Datum() As Date
Get
Return mDatum
End Get
Set(ByVal value As Date)
SetDatum(value)
End Set
End Property

<Browsable(False)> _
Public Property DBDatum() As Object
Get
Select Case mDatum
Case New Date()
Return DBNull.Value
Case Else
Return mDatum
End Select
End Get
Set(ByVal value As Object)
SetDatum(value)
End Set
End Property

Friend Sub SetDatum(ByVal D As Object)
If D.GetType Is GetType(Date) Then
mDatum = CDate(D)
Else
mDatum = New Date()
End If
End Sub
End Class
End Class
' \\\ E N T E

Die Eigenschaft DBDatum ist nun als Browsable(False)
gekennzeichnet und damit im PropertyGrid nicht mehr
sichtbar. Mit mTC.DBDatum kannst Du aber nach wie
vor auf diese Eigenschaft zugreifen.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen