Benutzer mit den meisten Antworten
TextBox.Text zur Eingabe markieren

Frage
-
Hallo an Alle,
1.) wie kann man einen Maus-Doppel-Click auf ein TextBox-Feld kodieren ?
Nach Doppel-Click mit der Maus erscheint der alte Text negativ dargestellt (reversed)
und wird sofort von der neuen Eingabe überschrieben.
if NOT 1.) then bitte
2.) wo kann ich in der Online-Hilfe suchen
Danke für eine Antwort
und viele Grüße
Peter
Antworten
-
Hallo Peter,
ein Doppelklick selektiert bei einer Textbox das Wort in dem der Cursor steht,
nicht die gesamten Inhalt - was man nur sieht wenn man mehrere Worte hat.
Da Du aber vermutlich alles selektieren willst, wäre ein SelectAll das schmerzloseste.
Nur funktioniert so etwas nicht im KeyDown/KeyPress, da Du Dich dort in der Eingabeschleife
befindest und die Anzeige durch die nächste Eingabe wieder verändert wird.
Nicht nur deswegen, was Deine Eingaberoutine angeht:
Prüfen solltest Du weniger im KeyPress, dort bestenfalls auf numerische Angaben prüfen,
siehe z. B.: Gewusst wie: Erstellen eines numerischen Textfelds
denn ansonsten machst Du es dem Benutzer schwer, Eingaben zu korrigieren.
Ausserdem wirst Du schnell durch Funktionen wie Copy und Paste ausgetrickst.
Eine Überprüfung sollte im Validating Ereignis stattfinden. Das koopiert auch mit
den anderen Dingen wie der Datenbindung.
Und hier wäre das SelectAll angebracht, wenn Deine Prüfung fehlerhaft ausfällt.
Besser als CSng wäre im übrigen:
If Not Double.TryParse(Tb25.Text, sb_Gew) Then MessageBox.Show("Keine numerische Eingabe") Tb25.SelectAll() End If
(wie gesagt, ausserhalb von KeyPress, KeyDown...)
Zu den Farben:
Eine Standard-Textbox kennt nur jeweils eine Vordergrund (ForeColor) und Hintergrundfarbe (BackColor).
Die kannst Du zur Laufzeit wechseln (um z. B. Rot für negative Werte anzuzeigen).
Willst Du mehrere unterschiedliche Farben darstellen brauchst Du eine RichTextBox.
Gruß Elmar- Bearbeitet Robert BreitenhoferModerator Donnerstag, 4. Februar 2010 16:44 Code Formatierung
- Als Antwort vorgeschlagen Thorsten DörflerModerator Sonntag, 7. Februar 2010 12:26
- Als Antwort markiert Robert BreitenhoferModerator Montag, 8. Februar 2010 11:41
-
Hallo Peter,
mit der SelectAll Methode kannst Du den gesamten Text markieren. Die Darstellung variiert natürlich je nach Farbschema des Benutzers, sowie ob die TextBox gerade den Fokus hat. Damit die Markierung auch sichtbar ist, wenn die TextBox gerade nicht den Eingabefokus hat, muss man die HideSelection Eigenschaft auf False setzen:
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs _ ) Handles Button1.Click TextBox1.HideSelection = False TextBox1.SelectAll() TextBox1.Select() End Sub
Thorsten Dörfler
Microsoft MVP Visual Basic- Als Antwort vorgeschlagen Thorsten DörflerModerator Sonntag, 7. Februar 2010 12:25
- Als Antwort markiert Robert BreitenhoferModerator Montag, 8. Februar 2010 11:41
Alle Antworten
-
Hallo Peter,
in Windows Forms ist alles Event-gesteuert, es gibt natürlich auch das Event MouseDoubleClick.
Eine Textbos verhält sich bereits, wie Du es beschrieben hast; willst Du es ändern, kannst Du die Selection... Prooperties verwenden.
Private Sub TextBox1_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseDoubleClick
Me.TextBox1.SelectionStart = 0
Me.TextBox1.SelectionLength = 0
End Sub
Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de -
Hallo Olaf,
besten Dank für Deine schnelle Reaktion, aber . .
ich suche den VB-Code, der den selben Effekt hat wie ein DoubleClick mit der Maus.
MEine TextBox ist bereits ge-Entert,
jetzt soll der angezeigte Wert negativ (reversed)
= weißer Text auf d'blauem Grund angezeigt werden.
Danke für den nxt Tipp
Peter -
Hallo Peter
Um den Text Negativ darstellen gebe ich Dir zwei Beispiele:
Public Class Form1 Private Sub TextBox1_MouseDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseDoubleClick Me.TextBox1.SelectionStart = 0 Me.TextBox1.SelectionLength = 0 Me.TextBox1.Text = StrReverse(Me.TextBox1.Text) End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim strOrgText As String Dim strRevText As [Char]() Dim array As Array strOrgText = Me.TextBox1.Text strRevText = strOrgText.ToCharArray array.Reverse(strRevText) Me.TextBox1.Text = strRevText End Sub End Class
Artikeln:StrReverse-Funktion (Visual Basic) à http://msdn.microsoft.com/de-de/library/e462ax87.aspx
Array.Reverse-Methode à http://msdn.microsoft.com/de-de/library/d3877932.aspx
Control.MouseDoubleClick-Ereignis à http://msdn.microsoft.com/de-de/library/system.windows.forms.control.mousedoubleclick.aspx
Grüße,Robert
-
Hallo Peter,
mit der SelectAll Methode kannst Du den gesamten Text markieren. Die Darstellung variiert natürlich je nach Farbschema des Benutzers, sowie ob die TextBox gerade den Fokus hat. Damit die Markierung auch sichtbar ist, wenn die TextBox gerade nicht den Eingabefokus hat, muss man die HideSelection Eigenschaft auf False setzen:
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs _ ) Handles Button1.Click TextBox1.HideSelection = False TextBox1.SelectAll() TextBox1.Select() End Sub
Thorsten Dörfler
Microsoft MVP Visual Basic- Als Antwort vorgeschlagen Thorsten DörflerModerator Sonntag, 7. Februar 2010 12:25
- Als Antwort markiert Robert BreitenhoferModerator Montag, 8. Februar 2010 11:41
-
Hallo Thorsten, hallo Olaf,
Eure Tipps bringen mich meinem Ziel noch nicht näher.
In einer Eingabe-Sub soll nach der Try/ catch -Abfrage das Textfeld genau so dastehen, als ob man einen Doppel-Click darauf gesetzt hätte: negativ, Cursor am Eingabe-Ende und bereit zur neuen Eingabe.
Private Sub Tb25_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Tb25.KeyDown If e.KeyCode = Keys.Enter Then e.Handled = True Try sb_Gew = CSng(Tb25.Text) ' Gewicht sGew Catch ex As Exception Beep() MsgBox("Eingabe prüfen!") End Try sb_Gew = CSng(Tb25.Text) Select Case sb_Gew Case Is < 0.01 sb_Gew = 0.01 MsgBox("min. Gewicht sind 10 Gramm" Case 0.01 To 1 ' --> "X,XXX" kg sb_Gew = Format(sb_Gew, "0.000") Case 1 To 9.99 ' --> "X,XX" kg . . . . es folgen weitere Cases Format(sb_Gew, "#,##0") End Select sEing = sb_Gew ' (Tb25.Text) tFeld = DirectCast(sender, TextBox).Name Tb25.Text = sb_Gew.ToString ' Format(sEing, "0.000") Call Nachrechnen(sEing, tFeld) End If End Sub
Nebenfrage: wie formatiert man hier an dieser Stelle den Text (Schriftgröße, -Farbe etc)?
Viele Grüße
Peter- Bearbeitet Robert BreitenhoferModerator Donnerstag, 4. Februar 2010 16:48 Code Formatierung
-
Hallo Peter,
ein Doppelklick selektiert bei einer Textbox das Wort in dem der Cursor steht,
nicht die gesamten Inhalt - was man nur sieht wenn man mehrere Worte hat.
Da Du aber vermutlich alles selektieren willst, wäre ein SelectAll das schmerzloseste.
Nur funktioniert so etwas nicht im KeyDown/KeyPress, da Du Dich dort in der Eingabeschleife
befindest und die Anzeige durch die nächste Eingabe wieder verändert wird.
Nicht nur deswegen, was Deine Eingaberoutine angeht:
Prüfen solltest Du weniger im KeyPress, dort bestenfalls auf numerische Angaben prüfen,
siehe z. B.: Gewusst wie: Erstellen eines numerischen Textfelds
denn ansonsten machst Du es dem Benutzer schwer, Eingaben zu korrigieren.
Ausserdem wirst Du schnell durch Funktionen wie Copy und Paste ausgetrickst.
Eine Überprüfung sollte im Validating Ereignis stattfinden. Das koopiert auch mit
den anderen Dingen wie der Datenbindung.
Und hier wäre das SelectAll angebracht, wenn Deine Prüfung fehlerhaft ausfällt.
Besser als CSng wäre im übrigen:
If Not Double.TryParse(Tb25.Text, sb_Gew) Then MessageBox.Show("Keine numerische Eingabe") Tb25.SelectAll() End If
(wie gesagt, ausserhalb von KeyPress, KeyDown...)
Zu den Farben:
Eine Standard-Textbox kennt nur jeweils eine Vordergrund (ForeColor) und Hintergrundfarbe (BackColor).
Die kannst Du zur Laufzeit wechseln (um z. B. Rot für negative Werte anzuzeigen).
Willst Du mehrere unterschiedliche Farben darstellen brauchst Du eine RichTextBox.
Gruß Elmar- Bearbeitet Robert BreitenhoferModerator Donnerstag, 4. Februar 2010 16:44 Code Formatierung
- Als Antwort vorgeschlagen Thorsten DörflerModerator Sonntag, 7. Februar 2010 12:26
- Als Antwort markiert Robert BreitenhoferModerator Montag, 8. Februar 2010 11:41