如何将一些文本放入文本框中,当用户在其中键入内容时会自动将其删除?(在WPF中)
我正在寻找一种方法来将占位符文本添加到文本框中,就像在html5中使用文本框一样.
即如果文本框没有文本,则添加文本Enter some text here,当用户点击它时,占位符文本消失并允许用户输入自己的文本,如果文本框失去焦点但仍然没有文本,则占位符为添加回文本框.
任何人都可以指向一个基本的Windows窗体TextBox的良好实现,它最初会显示水印文本,当光标进入时它会消失吗?我想我可以通过创造性地使用Enter和Leave事件来创建我自己的东西,但我确信在某个地方有一个完全可用的实现.我看到了WPF实现,如果有必要,我可以嵌套它,但原生的WinForms TextBox派生会更好.
到目前为止,我有这个; 尚未尝试过,但有没有人看到任何明显的问题?
public class WatermarkTextBox:TextBox
{
public string WatermarkText { get; set; }
public Color WatermarkColor { get; set; }
private Color TextColor { get; set; }
private bool isInTransition;
public WatermarkTextBox()
{
WatermarkColor = SystemColors.GrayText;
}
private bool HasText { get { return Text.IsNotNullOrBlankOr(WatermarkText); }}
protected override void OnEnter(EventArgs e)
{
base.OnEnter(e);
if (HasText) return;
isInTransition = true;
ForeColor = TextColor;
Text = String.Empty;
isInTransition = false;
}
protected override void OnForeColorChanged(EventArgs e)
{
base.OnForeColorChanged(e);
if (!isInTransition) …Run Code Online (Sandbox Code Playgroud) 显示" 在此处键入... ",直到用户将文本输入到a中,这TextBox是当今众所周知的可用性功能.如何在C#中实现此功能?
我的想法是覆盖OnTextChanged,但处理文本更改的逻辑" 在这里输入 "有点棘手......
在初始化时显示" 在此输入 "并在第一次输入时将其删除很容易,但我想在每次输入的文本变空时显示消息.
我的程序:只有一个文本框.我正在使用C#语言编写代码.
我的目标:在文本框中显示文字/水印:'请输入你的名字'.因此,当用户点击文本框时,默认文本/水印会被清除/删除,以便用户可以在文本框中输入他的名字.
我的问题:我尝试了各种在线可用的代码,但它们似乎都不适合我.所以,我想我应该在这里问一个简单的代码.我在网上找到了一个代码,但似乎不起作用:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
SetWatermark("Enter a text here...");
}
private void SetWatermark(string watermark)
{
textBox1.Watermark = watermark;
}
}
}
Run Code Online (Sandbox Code Playgroud)
错误:
错误1'System.Windows.Forms.TextBox'不包含'Watermark'的定义,并且没有扩展方法'Watermark'接受类型'System.Windows.Forms.TextBox'的第一个参数可以找到(你错过了吗?使用指令或程序集引用?)
如果您对我的目标有任何其他建议,我将非常感激.我在网上累了很多例子,但都很混乱/不工作.感谢您的帮助.:)
我有一个带有多个文本框的C#Winforms程序.我使用每个框的属性在其中放置文本,向用户解释其中的值.每当用户选择该框时,我希望文本突出显示.通过Tab键或鼠标单击.如果有一种方法可以显示文本框中除了它之外的某个值,我就不必这样做了.
我尝试了Textbox.select方法,但没有效果.与此相同.
这是我的程序的屏幕截图.
我的代码:
private void grapplingText1_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
{
grapplingText1.SelectionStart = 0;
grapplingText1.SelectionLength = grapplingText1.Text.Length;
Run Code Online (Sandbox Code Playgroud)
这样做,还是更需要?
如何制作它,以便在单击文本框时,文本框中最初的文本("在此处输入文本")将被清除,并且仅在第一次单击时被清除?
编辑:对不起,我正在使用C#.
我想用c#在我的Windows窗体的文本框中使用水印?
我在stackoverflow中找到了这个链接.但我真的无法弄清楚如何在我的Windows应用程序中使用.
class WatermarkTextBox : TextBox
{
private const uint ECM_FIRST = 0x1500;
private const uint EM_SETCUEBANNER = ECM_FIRST + 1;
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, uint wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam);
private string watermarkText;
public string WatermarkText
{
get { return watermarkText; }
set
{
watermarkText = value;
SetWatermark(watermarkText);
}
}
private void SetWatermark(string watermarkText)
{
SendMessage(this.Handle, EM_SETCUEBANNER, 0, watermarkText);
}
}
Run Code Online (Sandbox Code Playgroud)
请帮助如何使用SendMessage方法或建议我使用水印的任何其他(简单)方法.