如何将占位符文本添加到 ToolStripTextBox?

Posted

技术标签:

【中文标题】如何将占位符文本添加到 ToolStripTextBox?【英文标题】:How to add placeholder text to ToolStripTextBox? 【发布时间】:2018-11-27 19:35:55 【问题描述】:

在 WinForms 项目中,我知道如何将 placeholder text 添加到常规文本框。但 ToolStripTextBox 似乎不是常规文本框。一方面,它不公开句柄(这是通过 Win API 设置占位符文本所需要的)。

那么,如何在 ToolStripTextBox 上设置占位符文本或获取其 .Handle 属性?

【问题讨论】:

【参考方案1】:

ToolStripTextBox 内部有一个ToolStripTextBoxControl,它派生自TextBox,您可以使用其TextBox 或其Control 属性访问托管控件。所以你可以写这样的代码:

using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;

[ToolboxBitmap(typeof(ToolStripTextBox))]
public class MyToolStripTextBox : ToolStripTextBox

    private const int EM_SETCUEBANNER = 0x1501;
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    private static extern Int32 SendMessage(IntPtr hWnd, int msg,
        int wParam, string lParam);
    public MyToolStripTextBox()
    
        this.Control.HandleCreated += Control_HandleCreated;
    
    private void Control_HandleCreated(object sender, EventArgs e)
    
        if (!string.IsNullOrEmpty(cueBanner))
            UpdateCueBanner();
    
    string cueBanner;
    public string CueBanner
    
        get  return cueBanner; 
        set
        
            cueBanner = value;
            UpdateCueBanner();
        
    
    private void UpdateCueBanner()
    
        SendMessage(this.Control.Handle, EM_SETCUEBANNER, 0, cueBanner);
    

【讨论】:

还有TextBox,可以参考this post或this one。【参考方案2】:

我自己没试过。

Remarks 部分表明您可以直接操作TextBox 控件。

ToolStripTextBox 是为托管在 ToolStrip 中而优化的文本框。托管控件的属性和事件的子集在 ToolStripTextBox 级别公开,但底层 TextBox 控件可通过 TextBox 属性完全访问

【讨论】:

以上是关于如何将占位符文本添加到 ToolStripTextBox?的主要内容,如果未能解决你的问题,请参考以下文章

如何将标签添加到 textField 类或动画占位符

如何将占位符属性添加到 JSF 输入组件?

在 Wordpress 主题中(使用 get_search_form()),如何将占位符文本添加到搜索框?

将 HTML5 占位符文本添加到文本框 .net

将占位符文本添加到 Jquery Tokeninput

如何在 Django Admin 的搜索框中添加占位符文本?