首页 新闻 会员 周边

winform程序,如何实现文本框,默认显示“提示信息”,只要一点击,提示就没了

0
悬赏园豆:200 [已解决问题] 解决于 2014-12-09 20:18

winform程序,如何实现文本框,默认显示“提示信息”,只要一点击,提示就没了

比如,两个文本框,一个用户名,一个密码
用户名的文本框中默认显示 “请输入用户名”
密码框的文本框默认显示“请输入密码”

昨天刚学做winfrom程序好多不是很懂

c#
拾光者的主页 拾光者 | 初学一级 | 园豆:2
提问于:2014-12-05 11:07
< >
分享
最佳答案
1

这是一种常用的用户体验:叫水印Textbox,即Watermark TextBox,微软控件库没有提供支持,一般为了方便重用,都会对默认的TextBox进行继承拓展。给你一个网址:http://blog.csdn.net/sqshine/article/details/3739671,里面提供了实现方式。这样你也不用每个TextBox都写触发事件了。效果是:

后话:有人用WPF三行代码实现了这种效果http://www.codeproject.com/Articles/26977/A-WatermarkTextBox-in-lines-of-XAML

祝你在.NET开发上“芝麻开花节节高”!

收获园豆:50
心梦缘 | 菜鸟二级 |园豆:314 | 2014-12-05 12:20
其他回答(9)
1

你以前学WEB编程的吧?

Winform没有这样的默认行为,你非要的话,可以通过Textbox_Focused事件捕捉,自行处理。

 

楼下说的DX,全名是DevExpress,里面有个控件叫TextEdit,

在Properties属性中,有个属性叫NullText,设置那个属性,就可以得到你要的效果。

收获园豆:20
爱编程的大叔 | 园豆:30839 (高人七级) | 2014-12-05 11:16
0

DX控件 winform  自带你要的这种属性

收获园豆:20
风醉 | 园豆:1197 (小虾三级) | 2014-12-05 11:17

这个我倒是没有注意到,一般应该是从WEB转WINFORM的才会有这种想法。

我是WINFORM做得太久了,直接没有想法了。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2014-12-05 11:22

@爱编程的大叔: 听你这么一说,特意去DxDemoCenter 去找了下是不是记错了,好早以前做过winform

支持(0) 反对(0) 风醉 | 园豆:1197 (小虾三级) | 2014-12-05 11:32

DX的textedit碰到passwordchar也不好搞。 得动态去判断。 

支持(0) 反对(0) 问天何必 | 园豆:3311 (老鸟四级) | 2014-12-05 11:39
0

1、通过事件组合来实现吧。默认设置Text,ForeColor,然后有输入的时候置空,重新设置ForeColor。

2、或者用支持该功能的第三放组件库实现;

3、再者就是封装自定义控件(详细同1),实现。

收获园豆:20
幻天芒 | 园豆:37175 (高人七级) | 2014-12-05 11:27
0

一: 设置文本框的Text为你要的提示“提示信息”,

二: 用好文本框的两个事件, 代码为下:  textBox1为用户名, textBox2为密码框。 

      private void textBox1_Enter(object sender, EventArgs e)//用户名文本框焦点获得事件
        {
            if (textBox1.Text == "请输入用户名")
            {
                textBox1.Text = "";
            }
        }

        private void textBox1_Leave(object sender, EventArgs e)//用户名文本框焦点离开
        {
            if (textBox1.Text == "")
            {
                textBox1.Text = "请输入用户名";
            }
        }

        private void textBox2_Enter(object sender, EventArgs e) //密码框焦点获得
        {
            textBox2.PasswordChar = char.Parse("*"); //设置密码框显示字符为*
            if (textBox2.Text == "请输入密码")
            {
                textBox2.Text = "";
            }
        }

        private void textBox2_Leave(object sender, EventArgs e)
        {

            if (textBox2.Text == "")
            {
                textBox2.Text = "请输入密码";
                textBox2.PasswordChar = '\0'; //清空PasswordChar设置
            }
        }

三: 在点提交按钮之时, 再去判断文本框是否为“请输入...神马”, 如果是, 就阻止用户提交。 

 

楼上大侠

收获园豆:30
问天何必 | 园豆:3311 (老鸟四级) | 2014-12-05 11:30
0

https://social.msdn.microsoft.com/Forums/windows/en-us/10f75954-6d14-4926-a02d-98649653b9c8/watermark-textbox-in-winform

 

public partial class WatermarkBox : TextBox {
  private string watermark;
  private Color watermarkColor;
  private Color foreColor;
  private bool empty;
  [Browsable (true)]
  public Color WatermarkColor {
    get { return watermarkColor; }
    set {
      watermarkColor = value;
      if (empty) {
        base.ForeColor = watermarkColor;
      }
    }
  }
  [Browsable(true)]
  public string Watermark {
    get { return watermark; }
    set {
      watermark = value;
      if (empty) {
        base.Text = watermark;
        base.ForeColor = watermarkColor;
      }
    }
  }
  public WatermarkBox () {
    empty = true;
    foreColor = ForeColor;
  }
  [Browsable(true)]
  public new Color ForeColor {
    get { return foreColor; }
    set {
      foreColor = value;
      if (! empty)
        base.ForeColor = value;
    }
  }
  public override string Text {
    get {
      if (empty)
        return "";
      return base.Text;
    }
    set {
      if (value == "") {
        empty = true;
        base.ForeColor = watermarkColor;
        base.Text = watermark;
      } else 
        base.Text = value;
    }
  }
  protected override void OnGotFocus (EventArgs e) {
    if (empty) {
      empty = false;
      base.ForeColor = foreColor;
      base.Text = "";
    }
    base.OnGotFocus (e);
  }
  protected override void OnLostFocus (EventArgs e) {
    base.OnLostFocus (e);
    if (base.Text == "") {
      empty = true;
      base.ForeColor = watermarkColor;
      base.Text = watermark;
    } else
      empty = false;
  }
}
View Code

 

自定义一个 watermarkTextbox,然后在工具箱拖拽一个 watermarkBox

最后设置Watermark 属性,就OK了

收获园豆:30
Yu | 园豆:12980 (专家六级) | 2014-12-05 14:16
0

自己做一个自定义控件是最方便的方法,还能通用!

收获园豆:20
刘宏玺 | 园豆:14020 (专家六级) | 2014-12-05 20:05
1

I think you've got your answer

收获园豆:10
+小马哥++ | 园豆:906 (小虾三级) | 2014-12-06 12:01
0

也曾想过,看到这么多大神的解答,真的是学习了。

香蕉蘸着豆腐乳 | 园豆:202 (菜鸟二级) | 2015-10-27 22:15
0

其实试过了楼上各位大神的各种方法,对于电脑小白来说都有些复杂了,我来说个方法吧

然后回车或双击textBox11_MouseClick进入编辑

 

输入上面代码,运行就可以了

村子的故事 | 园豆:202 (菜鸟二级) | 2018-05-05 15:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册