Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0513: Resourcensparende Eingabefelder

 von 

Beschreibung 

Manche Controls, wie z.B. eine Richtextbox sind wahre Resourcenfresser. Man sollte also nicht unnötig viele davon in ein Projekt einbinden. Ein Texteingabefeld mit all seinen Möglichkeiten wird natürlich nur dort benötigt, wo gerade editiert wird. Ansonsten kann man den Inhalt auch in einem Label speichern, was auch nicht gerade sparsam ist. Dieses Beispiel zeigt, wie dies zu bewerkstelligen ist. So ähnlich wie hier gezeigt, wird auch das Eigenschaftenfenster in VB oder die Eingabezeilen im Explorer realisiert.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

keine

Download:

Download des Beispielprojektes [2,9 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------ Anfang Projektdatei MultiEdit.vbp  ------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Textfeld "txtEdit"
' Steuerelement: Beschriftungsfeld "Label3"
' Steuerelement: Beschriftungsfeld "Label2"
' Steuerelement: Beschriftungsfeld "lblInput" (Index von 0 bis 0)
' Steuerelement: Beschriftungsfeld "lblDescr" (Index von 0 bis 0)
' Steuerelement: Beschriftungsfeld "Label1"
'Dieser Source stammt von http://www.ActiveVB.de

'Sollten Sie Fehler entdecken oder Fragen haben, dann
'mailen Sie mir bitte unter: Reinecke@ActiveVB.de
'**************************************************************

' Autor: K. Langbein Klaus@ActiveVB.de

' Beschreibung: Manche Controls, wie z.B. eine Richtextbox sind wahre
' Resourcenfresser. Man sollte also nicht unnoetig viele davon
' in ein Projekt einbinden. Ein Texteingabefeld mit all seinen
' Moeglichkeiten wird natuerlich nur dort benoetigt, wo gerade editiert
' wird. Ansonsten kann man den Inhalt auch in einem Label speichern,
' was auch nicht gerade sparsam ist. Dieses Beispiel zeigt, wie dies
' zu bewerkstelligen ist. So aehnlich wie hier gezeigt, wird auch das
' Eigenschaftenfenster in VB oder die Eingabezeilen im Explorer realisiert.

Option Explicit
Dim txtChanged As Boolean
Dim ix As Integer
Private Sub Form_Load()
    
    Dim i As Long
      
    ' Hier kommt die Beschreibung rein
    lblDescr(i).Caption = "Descr(" + Format$(i) + ")"
    ' Hier die Inhalte
    lblInput(i).Caption = "Value(" + Format$(i) + ")"
    
    For i = 1 To 10
        ' Die restlichen Controls werden nachgeladen
        Load lblInput(i)
        Load lblDescr(i)
        
        ' Irgendwas reinschreiben
        lblInput(i).Caption = "Value(" + Format$(i) + ")"
        lblDescr(i).Caption = "Descr(" + Format$(i) + ")"
        
        ' Anordnen
        lblInput(i).Top = lblInput(0).Top + i * lblInput(0).Height * 1.2
        lblDescr(i).Top = lblDescr(0).Top + i * lblDescr(0).Height * 1.2
        
        ' Nach dem laden sind sie noch unsichtbar...
        lblInput(i).Visible = True
        lblDescr(i).Visible = True
        
    Next i
    
End Sub


Private Sub lblDescr_Click(Index As Integer)
    Call lblInput_Click(Index)
End Sub


Private Sub lblDescr_DblClick(Index As Integer)
    Call txtEdit_KeyDown(13, 0)
End Sub


Private Sub lblInput_Click(Index As Integer)
   
    If txtChanged = True Then
        ' Wenn geaendert, dann Wert in das vorherige Label
        ' uebernehmen
        ix = Val(txtEdit.Tag)
        lblInput(ix).Caption = txtEdit.Text
    End If
   
    ' Damit wir wissen, wo gerade editiert wird, wird der Index
    ' in die Tag-Eigenschaft geschrieben
    txtEdit.Tag = Format$(Index)
    txtEdit.Move lblInput(Index).Left, lblInput(Index).Top, _
                 lblInput(Index).Width, lblInput(Index).Height
                 
    ' Wert uebergeben
    txtEdit.Text = lblInput(Index).Caption
    txtChanged = False
    
    ' Folgendes kann man machen, muss aber nicht sein
    txtEdit.SelLength = Len(txtEdit.Text)
    
    txtEdit.Visible = True
    
End Sub


Private Sub txtEdit_Change()
    txtChanged = True
End Sub

Private Sub txtEdit_KeyDown(KeyCode As Integer, Shift As Integer)

   '
    ix = Val(txtEdit.Tag)
    
    Select Case KeyCode
            
    Case 13 ' Enter
        
        lblInput(ix).Caption = txtEdit.Text
        txtEdit.Visible = 0
        
    Case 38 ' up
        
        If ix = lblInput.LBound Then
            Beep
        Else
            ix = ix - 1
            Call lblInput_Click(ix)
        End If
        
    Case 40 ' down
        
        If ix = lblInput.UBound Then
            Beep
        Else
            ix = ix + 1
            Call lblInput_Click(ix)
        End If
            
        
    Case Else
        'MsgBox KeyCode
    End Select

End Sub


Private Sub txtEdit_KeyPress(KeyAscii As Integer)
    ' Hier wird der laestige Piepser unterdreuckt
    If KeyAscii = 13 Then KeyAscii = 0
End Sub


'---------- Ende Formular "Form1" alias Form1.frm  ----------
'------------- Ende Projektdatei MultiEdit.vbp  -------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.