Frage zu geeigneter Klassenstruktur

13/03/2009 - 19:21 von Peter Acker | Report spam
Hallo
ich habe eine Form mit einem Panel auf der ich je nach Bedarf eines von
mehreren Usercontrols (ctlX) mit jeweils einer gleichnamigen Richtextbox
platziere (und einigen anderen Ctls mebr). Die ctlX werden in Mainform mit
New instanziert. Da ich in der Form auf die Child-Controls der Usercontrols
(zB Richtextbox) zentral zugreifen möchte, möchte ich die aktuell gültige
RTF-Box zB der Variablen _curRTF zuweisen, was aber nicht funktioniert

Public Class frmMain
Dim _A As New ctlA
Dim _B As New ctlB
Dim _curCTL As Object
Dim _curRTF As RichTextBox

Private Sub cmd_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs)
Panel1.Controls.Clear()
If sender Is Me.Button1 Then
_curCTL = _A
ElseIf sender Is Me.Button2 Then
_curCTL = _B
End If
Panel1.Controls.Add(_curCTL)
_curCTL.Dock = DockStyle.Fill
_curRTF = _curCTL.rtfText
_curRTF.Focus()
End Sub
End Class

Geht:
_curRTF = _A.rtfText

Geht nicht:
_curCTL = _A
_curRTF = _curCTL.rtfText

Was mich auch stört ist die Notwendigkeit _curCTL as Object deklarieren zu
müssen und somit keine Intellisense habe. Wàre in den Controls jeweils eine
Public-Var mit Verweis auf rtfText das Richtige oder ist die Zuweisung in
der If-Struktur die richtige, was aber den Code ziemlich aufblàht?


Gruß Peter
 

Lesen sie die antworten

#1 Thorsten Doerfler
13/03/2009 - 21:44 | Warnen spam
Peter Acker schrieb:
ich habe eine Form mit einem Panel auf der ich je nach Bedarf eines von
mehreren Usercontrols (ctlX) mit jeweils einer gleichnamigen Richtextbox
platziere (und einigen anderen Ctls mebr). Die ctlX werden in Mainform mit
New instanziert. Da ich in der Form auf die Child-Controls der Usercontrols
(zB Richtextbox) zentral zugreifen möchte, möchte ich die aktuell gültige
RTF-Box zB der Variablen _curRTF zuweisen, was aber nicht funktioniert

Public Class frmMain
Dim _A As New ctlA
Dim _B As New ctlB
Dim _curCTL As Object
Dim _curRTF As RichTextBox

Private Sub cmd_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs)
Panel1.Controls.Clear()
If sender Is Me.Button1 Then
_curCTL = _A
ElseIf sender Is Me.Button2 Then
_curCTL = _B
End If
Panel1.Controls.Add(_curCTL)
_curCTL.Dock = DockStyle.Fill
_curRTF = _curCTL.rtfText
_curRTF.Focus()
End Sub
End Class

Geht:
_curRTF = _A.rtfText

Geht nicht:
_curCTL = _A
_curRTF = _curCTL.rtfText

Was mich auch stört ist die Notwendigkeit _curCTL as Object deklarieren zu
müssen und somit keine Intellisense habe. Wàre in den Controls jeweils eine
Public-Var mit Verweis auf rtfText das Richtige oder ist die Zuweisung in
der If-Struktur die richtige, was aber den Code ziemlich aufblàht?



Eine richtige Lösung wàre die Arbeit mit gemeinsamen Interfaces, die von
ctlA und ctlB implementiert werden. Eventuell haben ctlA und ctlB auch
noch mehr Gemeinsamkeiten, als die gleiche Schnittstelle, dann würde
sich auch Vererbung anbieten, womit beide Controls dann die gemeinsame
Basisklasse hàtten.

Die Idee mit dem Unterstrich bei den Variablenbezeichnern ist übrigens
schlechter Stil, genauso wie camelCase bei Eigenschaften einer Klasse.

Thorsten Dörfler
Microsoft MVP Visual Basic

vb-hellfire visual basic faq | vb-hellfire - einfach anders
http://vb-faq.de/ | http://www.vb-hellfire.de/

Ähnliche fragen