【问题标题】:How to load a specific text in textbox with greyish colour and uneditable [duplicate]如何在文本框中加载灰色且不可编辑的特定文本[重复]
【发布时间】:2020-04-29 01:52:14
【问题描述】:

我正在使用 Visual Basic 创建登录表单。我是否可以在灰色且不可编辑的文本框中加载特定文本? (就像Youtube搜索栏的效果)我在网上找到的只是隐藏功能和改变文字的颜色。

对不起,我的标题令人困惑。

【问题讨论】:

  • 如果我理解您的要求,您所说的正式称为“提示横幅”。如果您搜索该术语,那么您会发现很多匹配项。您可以使用一些非托管代码自己实现它,也可以使用其他人使用内置该功能创建的控件。周围会有很多这样的现成控件。

标签: vb.net winforms


【解决方案1】:

将此模块 (ModExtentions) 添加到项目中:它将扩展方法 SetCueBanner() 添加到 TextBox 控件。
指定TrueFalse,更改提示横幅行为:

  • 错误:提示横幅在控件获得焦点之前可见,
  • 确实,提示横幅在输入第一个字符之前是可见的。

此内部功能被激活,向控件发送EM_SETCUEBANNER 消息。

像这样使用它:

' The Cue Banner is visible until the control gets focus
TextBox1.SetCueBanner("Some text...", False)

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

定义扩展方法的Module:

Imports System.Runtime.InteropServices

Public Module ModExtentions
    Private Const EM_SETCUEBANNER As Integer = &H1501

    <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
End Module

【讨论】:

    【解决方案2】:

    将 TextBox Enabled 属性设置为 false。您可以从代码中输入代码,但用户不能在框中输入。

    【讨论】:

    • 这是我的第一个想法,但我认为 OP 正在寻找一个提示,然后当您输入文本时该提示就会消失。他们提到了 YouTube 搜索栏,其中包含“搜索”一词,直到您开始输入为止。
    【解决方案3】:

    在 Form.Load 中设置您的灰色文本。使用 Enter 和 Leave 事件将其更改为正常并再次返回。

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        TextBox1.ForeColor = Color.Gray
        TextBox1.Text = "Search term here..."
    End Sub
    
    Private Sub TextBox1_Enter(sender As Object, e As EventArgs) Handles TextBox1.Enter
        TextBox1.ForeColor = Color.Black
        TextBox1.Text = ""
    End Sub
    
    Private Sub TextBox1_Leave(sender As Object, e As EventArgs) Handles TextBox1.Leave
        If String.IsNullOrWhiteSpace(TextBox1.Text) Then
            TextBox1.ForeColor = Color.Gray
            TextBox1.Text = "Search term here..."
        End If
    End Sub
    

    【讨论】:

    • 缺点是您实际上是在设置控件的Text,如果您没有输入任何其他内容,任何使用该属性的代码都会得到该提示文本。通过使用真正的提示横幅,您可以避免修改控件的实际数据。例如,如果控件已绑定,您将无法使用您的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    相关资源
    最近更新 更多