Anzeige
Archiv - Navigation
1296to1300
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
benutzerdefinierte Eigenschaft in TextBox
12.02.2013 15:04:48
klaus
Hallo zusammen,
ich erstelle dynamisch mehrere Controls, u.a. auch solche vom Type TextBox. Nun weise diesen Controls -ebenfalls dynamisch- verschiedene Ereignisse zu, auf die sie reagieren soll. All das habe ich mit einer neuen Klasse realisiert und es klappt reibungslos.
Jetzt möchte ich den Eigenschaften der TextBox weitere, benutzderdefinierte Eigenschaften hinzuzfügen, so dass sie über die übliche Syntax angesprochen werden können.
Beispiel:
...
const ttLong=1
...
...
TextBox1.Text = "Das ist normal"
TextBox1.MaxLength = 50
TextBox1.MinLength = 5
TextBox1.TextType = ttLong
...
MinLength und TextType sind Beispiele von den von mir gewünschten Zusatzeigenschaften.
Es geht mir hier nicht darum, auf welchem anderen Weg man ggf auch zum Ziel kommen könnte, sondern ich möchte genau das realisieren, was ich oben beschrieben habe.
Herzlichen Dank im Voraus
Klaus

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: benutzerdefinierte Eigenschaft in TextBox
12.02.2013 15:48:49
Nepumuk
Hallo,
und was hindert dich daran diese Eigenschaften in der Klasse zu deklarieren?
Gruß
Nepumuk

AW: benutzerdefinierte Eigenschaft in TextBox
12.02.2013 19:15:57
klaus
Hallo Nepomuk,
danke, dass du dich dieser Sache annimmst.
Tja, warum deklariere ich das nicht einfach?
Natürlich muss das der richtige Weg sein, aber ich weiß nicht, wo ich jetzt ansetzen muss.
Es fehlt mir ein Teil im Puzzle. (oder im Hirn ;-) )
Folgendes zum besseren Verständnis und zur weiteren Beschreibung.
Code der Klasse clsSpecialTextBox (Auszug)
---------------
Public WithEvents SpecialTextBox As MSForms.TextBox
Public EinString as String
Public EineZahl as Integer
Private tempTextType as Byte
Public Property Let TextType(v As Byte)
tempTextType = v
End Property
Public Property Get TextType() As Byte
TextType = tempTextType
End Property
Private Sub SpecialTextBox_Enter()
'Mach was...
End Sub
Private Sub SpecialTextBox_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Mach noch was...
End Sub

Modulcode (Auszug)
Dim TB as New clsSpecialTextBox
Dim str as String
Dim wert as Integer
Dim tt as Byte
Dim ctrl as Control
Set TB.SpecialTextBox = Add("MSForms.TextBox.1", "TextBox1")
Set ctrl = TB.SpecialTextBox
str = TB.EinString 'okay
TB.EineZahl = wert 'okay
TB.TextType = tt 'okay
'ABER
ctrl.TextType = tt 'NICHT zulässig bzw nicht vorhanden
Mir ist das klar, denn TextType ist keine Eigenschaft TextBox1, sondern von TB.
WIE bekomme ich es hin, dass TextType eine Eigenschaft der dynamisch erzeugten TextBox wird?
Ich habe natürlich einen Denkfehler, aber wo...?

Anzeige
AW: benutzerdefinierte Eigenschaft in TextBox
12.02.2013 19:38:16
Nepumuk
Hallo,
deine dynamische Textbox ist doch die Klasse TB. Die hat innerhalb des Userforms die Standardeigenschaften einer normalen Textbox, in deiner Klasse zusätzlich noch die von dir gewünschten Eigenschaften. Wo ist das Problem?
Gruß
Nepumuk

AW: benutzerdefinierte Eigenschaft in TextBox
12.02.2013 20:28:07
klaus
Hallo Nepomuk,
Wenn alles so wäre wie gewünscht, müsste TextBox1.TextType ein korrekter Ausdruck sein.
Das wäre dann analog zu z.B. TextBox1.Height, und nur dann wäre es eine weitere Eigenschaft der Standard-TextBox.
Das ist aber nicht der Fall, denn -wie du richtig sagst- TextType ist nur eine Eigenschaft von TB.
Gruß
Klaus

Anzeige
AW: benutzerdefinierte Eigenschaft in TextBox
12.02.2013 20:57:33
Nepumuk
Hallo,
selbst wenn das ginge, kannst du diese Eigenschaft doch nur in der Klasse nutzen. Ansonsten ist das nichts anderes wie z.B. die Tag-Eigenschaft der Textbox. Die kannst du schreiben und lesen, aber ansonsten hat sie keinerlei Auswirkung auf ihr Verhalten.
Gruß
Nepumuk

AW: benutzerdefinierte Eigenschaft in TextBox
12.02.2013 22:53:35
klaus
Damit hast du sicher Recht.
Allerdings beantwortet das nicht meine Frage danach, WIE es geht.
Danke für deine Antworten.

AW: benutzerdefinierte Eigenschaft in TextBox
12.02.2013 23:54:47
Nepumuk
Hallo,
dann nochmal, du kannst einer vorgegebenen Klasse im Nachhinein keine neue Eigenschaft geben. Nur deiner selbstgeschriebenen Klasse kannst du diese Eigenschaft geben.
Übrigens, wenn du in deiner Klasse eine Get-Prozedur für das Textbox-Objekt hast, dann kannst du alle Eigenschaften der Klasse übergeben.
' **********************************************************************
' Modul: clsTextBox Typ: Klassenmodul
' **********************************************************************

Option Explicit

Private WithEvents mobjTextBox As MSForms.TextBox

Private mbytTextType As Byte

Private Sub Class_Terminate()
    Set mobjTextBox = Nothing
End Sub

Friend Property Set TextBox( _
        ByRef probjTextBox As MSForms.TextBox)

    Set mobjTextBox = probjTextBox
End Property

Friend Property Get TextBox() As MSForms.TextBox
    Set TextBox = mobjTextBox
End Property

Friend Property Get TextType() As Byte
    TextType = mbytTextType
End Property

Friend Property Let TextType( _
        ByVal pvbytTextType As Byte)

    mbytTextType = pvbytTextType
End Property

' **********************************************************************
' Modul: UserForm1 Typ: Userform
' **********************************************************************

Option Explicit

Private mobjTextBoxClass As clsTextBox

Private Sub UserForm_Activate()
    
    Set mobjTextBoxClass = New clsTextBox
    
    Set mobjTextBoxClass.TextBox = _
        Controls.Add(bstrProgID:="Forms.TextBox.1")
    
    mobjTextBoxClass.TextType = 22
    
    With mobjTextBoxClass.TextBox
        
        .Top = 6
        .Left = 6
        .Width = 72
        .Height = 18
        
    End With
End Sub

Private Sub UserForm_Terminate()
    Set mobjTextBoxClass = Nothing
End Sub

Gruß
Nepumuk

Anzeige
AW: benutzerdefinierte Eigenschaft in TextBox
13.02.2013 10:32:34
Klaus
Hallo Nepomuk,
danke für das Beispiel - ein sehr gute Idee.
Auch wenn nicht das erreicht wird (werden kann), was ich mir vorgestellt habe, so ist das dann doch ein sehr gangbarer Weg und hilft mir weiter.
Übrigens:
Die Enter/Exit Ereignisse von dynamisch erzeugten TextBox-Controls werden nicht ausgelöst. Das Problem tritt nicht bei den anderen events auf, wie z.B. DblClick oder Change.
Ich habe stundenlang in verschiedensten Foren gesucht. Das Problem ist bekannt, aber die Lösung nicht.
Möglicherweise ein neuer Thread...
Gruß
Klaus

Anzeige
AW: benutzerdefinierte Eigenschaft in TextBox
13.02.2013 13:02:23
Nepumuk
Hallo,
dafür gibt es eine DLL. Die muss allerdings registiert werden.
Gruß
Nepumuk

AW: benutzerdefinierte Eigenschaft in TextBox
13.02.2013 18:01:01
Klaus
Ach ja?
Kannst du mir Näheres mitteilen?
Gruß
Klaus

AW: benutzerdefinierte Eigenschaft in TextBox
13.02.2013 18:38:45
Nepumuk
Hallo,
im Anhang findest du eine Beispielmappe und die DLL. Die DLL musst du registrieren indem du tja und jetzt kommts darauf an ob dein Windows eine 32 oder 64Bit - Version ist. Oder soll ich eine Setup-Routine schreiben?
https://www.herber.de/bbs/user/83893.zip
Gruß
Nepumuk

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige