VB 5/6-Tipp 0513: Resourcensparende Eingabefelder
von Klaus Langbein
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: | Verwendete API-Aufrufe: keine | Download: |
'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-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
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.