Как вернуть TextBox's Text go обратно на главную - PullRequest
0 голосов
/ 18 января 2020

Возможно, я не могу правильно объяснить эту проблему, но допустим, что в моем TextBox есть текст внутри "MM / DD / YYYY", который был отредактирован в его свойствах. Я хочу знать, как TextBox go снова вернется к этому тексту, если он не был выбран. Я попытался кодировать его, как только TextBox - Click, текст сам очистится, но я хочу знать, как он снова вернется к этому тексту. Извините, мой Engli sh отстой, но надеюсь, что вы понимаете.

 Private Sub birthdate_Click(sender As Object, e As EventArgs) Handles birthdate.Click
    birthdate.Clear()
End Sub

Вот код, когда я нажимаю на TextBox, он очищает сам текст. Это даст вам представление о том, что я говорю

1 Ответ

1 голос
/ 18 января 2020

Это модуль расширения, который добавляет метод к элементам управления TextBox и ComboBox, который активирует внутреннюю функциональность Cue Banner 1 . Для TextBox в двух доступных вариантах: Cue Banner виден: a) до тех пор, пока элемент управления не получает фокус, b) после ввода первого символа.
ComboBox Элемент управления удаляет Cue Banner, как только он получает фокус или открывается DropDown.

Функция Win32 SendMessage используется для изменения поведения элемента управления Edit - элемента управления TextBox и дочернего элемента управления Edit ComboBox, отправляя EM_SETCUEBANNER и CB_SETCUEBANNER сообщений соответственно.

1 Устанавливает текстовый сигнал или подсказку, отображаемую элементом управления редактированием, чтобы запросить у пользователя информацию.


Поскольку это методы расширения, каждый метод расширяет функциональность элементов управления и может вызываться напрямую:

' The Cue Banner is visible until the control gets focus
TextBox1.SetCueBanner("MM/DD/YYYY", False)

' The Cue Banner is visible until a character is entered
TextBox1.SetCueBanner("User Name...", True)

ComboBox1.SetCueBanner("Select an item...")

Добавить модуль в проект и заменить код, сгенерированный шаблоном с этим:

Public Module ModExtentions

    Private Const EM_SETCUEBANNER As Integer = &H1501
    Private Const CB_SETCUEBANNER As Integer = &H1703

    <DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=True)>
    Private Function SendMessage(ByVal hWnd As IntPtr, ByVal msg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Integer
    End Function

    <Extension()>
    Public Sub SetCueBanner(tbox As TextBox, ByVal text As String, ByVal showOnFocus As Boolean)
        SendMessage(tbox.Handle, EM_SETCUEBANNER, If(showOnFocus, 1, 0), text)
    End Sub

    <Extension()>
    Public Sub SetCueBanner(cbo As ComboBox, ByVal text As String)
        SendMessage(cbo.Handle, CB_SETCUEBANNER, 0, text)
    End Sub
End Module
...