Textbox ohne Cursor (wenn Readonly)

    • VB.NET
    • .NET (FX) 1.0–2.0

    Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von hausl78.

      Textbox ohne Cursor (wenn Readonly)

      Eine einfache Lösung, bei einer auf Textbox.Readonly = True eingestellten Textbox, das hässliche Blinken des Carets an der Eingabestelle zu unterbinden:

      VB.NET-Quellcode

      1. Imports System.Runtime.InteropServices
      2. Public Class Form1
      3. <DllImport("user32")>
      4. Private Shared Function HideCaret(ByVal hWnd As IntPtr) As Integer
      5. End Function
      6. <DllImport("user32")>
      7. Private Shared Function ShowCaret(ByVal hWnd As IntPtr) As Integer
      8. End Function
      9. Private Sub Textbox1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.GotFocus
      10. If Me.TextBox1.ReadOnly Then
      11. HideCaret(TextBox1.Handle)
      12. Else
      13. ShowCaret(TextBox1.Handle)
      14. End If
      15. End Sub
      16. End Class


      Ja, stimmt schon, das Ding (die Markierung an der Eingabestelle) heisst im Microsoft-Jargon wirklich nicht CURSOR sondern CARET. Der CURSOR hingegen bezeichnet den Mauszeiger (oder auch Zeiger auf aktuellen Datenatz in Datenbank)
      Es wär praktischer würdest du dies als Extension von TextBox schreiben.

      Visual Basic-Quellcode

      1. <DllImport("user32")> _
      2. Private Shared Function HideCaret(hWnd As IntPtr) As Integer
      3. End Function
      4. <DllImport("user32")> _
      5. Private Shared Function ShowCaret(hWnd As IntPtr) As Integer
      6. End Function
      7. <System.Runtime.CompilerServices.Extension> _
      8. Public Shared Sub ShowCaret(textBox As TextBox, state As Boolean)
      9. If state Then
      10. ShowCaret(textBox.Handle)
      11. Else
      12. HideCaret(textBox.Handle)
      13. End If
      14. End Sub


      Damit ist diese Methode direkt unter TextBox.ShowCaret(true|false) verfügbar.
      Das ist schon richtig so, du musst den Code halt, wie gefordert, in ein Modul stecken:

      VB.NET-Quellcode

      1. ​Public Module TextBoxExtensions
      2. <DllImport("user32")> _
      3. Private Shared Function HideCaret(hWnd As IntPtr) As Integer
      4. End Function
      5. <DllImport("user32")> _
      6. Private Shared Function ShowCaret(hWnd As IntPtr) As Integer
      7. End Function
      8. <System.Runtime.CompilerServices.Extension> _
      9. Public Shared Sub ShowCaret(textBox As TextBox, state As Boolean)
      10. If state Then
      11. ShowCaret(textBox.Handle)
      12. Else
      13. HideCaret(textBox.Handle)
      14. End If
      15. End Sub
      16. End Module
      Danke!
      Ja, stimmt, hatte den Schnipsel ergoogelt, weil es sonst (m.E. komischerweise) scheinbar keinen Weg gibt, den Caret (Text-Cursor) aus einer ReadOnly-Textbox zu unterdrücken. Weiter gehts wieder Step by Step selfmade ;)

      Danke!