WinForm——Text控件总结

举报
AI浩 发表于 2021/12/23 00:21:23 2021/12/23
【摘要】   目录 1、常用属性: Text属性 MaxLength 属性 MultiLine 属性 HideSelection属性 ReadOnly属性 PasswordChar 属性 ScrollBars属性 SelectionLength属性 SelectionStart属性 SelectedText 属性...

 

目录

1、常用属性:

Text属性

MaxLength 属性

MultiLine 属性

HideSelection属性

ReadOnly属性

PasswordChar 属性

ScrollBars属性

SelectionLength属性

SelectionStart属性

SelectedText 属性

Lines

Modified

TextLength属性

WordWrap

PasswordChar属性

ShorcutsEnabled属性

2、常用方法:

AppendText方法

Clear方法

Focus方法

Copy方法

Cut方法

Paste方法

Undo 方法

ClearUndo方法

Select方法

SelectAll方法

3、常用事件

GotFocus事件

LostFocus事件

TextChanged事件

4、使用实例

屏蔽系统的Ctrl+C/V/X等组合键。

禁用鼠标右键

分段显示颜色

TextBox在获取输入焦点的时候自动全选

只能输入数字和小数

只能输入不大于两位的正整数

只能输入汉字

只能输入数字,字符,屏蔽汉字

编写验证类

自定义TextBox控件,边框只有一个底部横线。


1、常用属性:

  • Text属性

Text属性是文本框最重要的属性,因为要显示的文本就包含在Text属性中。默认情况下,最多可在一个文本框中输入2048个字符。如果将MultiLine属性设置为true,则最多可输入32KB 的文本。Text属性可以在设计时使用【属性】窗口设置,也可以在运行时用代码设置或者通过用户输入来设置。可以在运行时通过读取Text属性来获得文本框的当前内容。

  • MaxLength 属性

用来设置文本框允许输入字符的最大长度,该属性值为 0 时,不限制输入的字符数。

  • MultiLine 属性

用来设置文本框中的文本是否可以输入多行并以多行显示。值为 true 时,允许多行显示。值为false时不允许多行显示,一旦文本超过文本框宽度时,超过部分不显示。

  • HideSelection属性

用来决定当焦点离开文本框后,选中的文本是否还以选中的方式显示,值为true,则不以选中的方式显示,值为 false将依旧以选中的方式显示。

  • ReadOnly属性

用来获取或设置一个值,该值指示文本框中的文本是否为只读。值为 true时为只读,值为 false时可读可写。

  • PasswordChar 属性

是一个字符串类型,允许设置一个字符,运行程序时,将输入到 Text 的内容全部显示为该属性值,从而起到保密作用,通常用来输入口令或密码。

  • ScrollBars属性

 用来设置滚动条模式, 有四种选择: ScrollBars.None (无滚动条), ScrollBars.Horizontal(水平滚动条),ScrollBars.Vertical(垂直滚动条),ScrollBars.Both(水平和垂直滚动条)。

注意:只有当MultiLine属性为true时,该属性值才有效。在WordWrap属性值为true时,

水平滚动条将不起作用

  • SelectionLength属性

用来获取或设置文本框中选定的字符数。只能在代码中使用,值为0 时,表示未选中任何字符。

  • SelectionStart属性

用来获取或设置文本框中选定的文本起始点。只能在代码中使用,第一个字符的位置为0,第二个字符的位置为1,依此类推。

  • SelectedText 属性

用来获取或设置一个字符串,该字符串指示控件中当前选定的文本。只能在代码中使用。

  • Lines

该属性是一个数组属性,用来获取或设置文本框控件中的文本行。即文本框中的每一行存放在 Lines数组的一个元素中。

  • Modified

用来获取或设置一个值,该值指示自创建文本框控件或上次设置该控件的内容后,用户是否修改了该控件的内容。值为true表示修改过,值为 false表示没有修改过。

  • TextLength属性

用来获取控件中文本的长度。

  • WordWrap

用来指示多行文本框控件在输入的字符超过一行宽度时是否自动换行到下一行的开始,值为 true,表示自动换到下一行的开始,值为false表示不自动换到下一行的开始。

  • PasswordChar属性

PasswordChar设置成某个特定的字符即可实现密码框。

  • ShorcutsEnabled属性

 指示是否启用为控件定的快捷键,将ShortcutsEnabled设置为False既能屏蔽右键也能屏蔽Ctrl+V和Ctrl+C快捷键。

 

2、常用方法:

  • AppendText方法

把一个字符串添加到文件框中文本的后面,调用的一般格式如下:

文本框对象.AppendText(str) 参数 str是要添加的字符串。

  • Clear方法

从文本框控件中清除所有文本。调用的一般格式如下: 文本框对象.Clear()该方法无参数。

  • Focus方法

是为文本框设置焦点。如果焦点设置成功,值为 true,否则为false。调用的一般格式如

下: 文本框对象.Focus()该方法无参数。

  • Copy方法

将文本框中的当前选定内容复制到剪贴板上。调用的一般格式如下:

文本框对象.Copy()该方法无参数。

  • Cut方法

将文本框中的当前选定内容移动到剪贴板上。调用的一般格式如下:

文本框对象.Cut()该方法无参数。

  • Paste方法

用剪贴板的内容替换文本框中的当前选定内容。调用的一般格式如下:

文本框对象.Paste()该方法无参数。

  • Undo 方法

撤销文本框中的上一个编辑操作。调用的一般格式如下:

文本框对象.Undo()该方法无参数。

  • ClearUndo方法

从该文本框的撤销缓冲区中清除关于最近操作的信息,根据应用

程序的状态,可以使用此方法防止重复执行撤销操作。调用的一般格式如下:

文本框对象.ClearUndo()该方法无参数。

  • Select方法

用来在文本框中设置选定文本。调用的一般格式如下:

文本框对象.Select(start,length)

该方法有两个参数,第一个参数start用来设定文本框中当前选定文本的第一个字符的位

置,第二个参数length用来设定要选择的字符数。

  • SelectAll方法

用来选定文本框中的所有文本。调用的一般格式如下:

文本框对象.SelectAll()该方法无参数。

3、常用事件

  • GotFocus事件

该事件在文本框接收焦点时发生。

  • LostFocus事件

该事件在文本框失去焦点时发生。

  • TextChanged事件

该事件在Text属性值更改时发生。无论是通过编程修改还是用户交互更改文本框的 Text属性值,均会引发此事件。

4、使用实例

  • 屏蔽系统的Ctrl+C/V/X等组合键。

本例主要用到KeyEventArgs类的Control属性、KeyCode属性和Handled属性。KeyEventArgs类的Control属性用来获取一个值,该值表示是否曾有Ctrl键按下,语法格式:

public bool Control {get;}

代码:

   private void textBox1_KeyDown(object sender, KeyEventArgs e)

        {

            if (e.Control && e.KeyCode == Keys.V)

            {

                e.Handled = true;

                MessageBox.Show("Ctrl+V组合键已屏蔽!");

            }

            if (e.Control && e.KeyCode == Keys.X)

            {

                e.Handled = true;

                MessageBox.Show("Ctrl+X组合键已屏蔽!");

            }

            if (e.Control && e.KeyCode == Keys.C)

            {

                e.Handled = true;

                MessageBox.Show("Ctrl+C组合键已屏蔽!");

            }

        }

注:屏蔽鼠标右键和快捷键Ctrl+C和Ctrl+V的最好方法是将ShortcutsEnabled设置为False

  • 禁用鼠标右键

MouseEventArgs类主要为MouseUp、MouseDown、MouseMove事件提供数据,其Button属性用获取曾按下的那个鼠标键。语法格式:public MouseButtons Button{get;}

参数说明:MouseButton枚举值之一。

枚举

说明

Left

按下鼠标左键

None

未曾按下鼠标键

Right

按下鼠标右键

Middle

按下鼠标中间键

XButton1

按下第一个XButton按钮

XButton2

按下第二个XButton按钮

 

private void txtBox_MouseDown(object sender,MouseEventArgs e)

{

       if (e.Buttom==MouseButton.Right)

{

       txtBox.ContextMenu=new ContextMenu();

}

}

  • 分段显示颜色

本例实现只要用到了RichTextBox控件的Select方法和SelectColor属性。Select方法主要用来再文本框中选择一个文本范围,该方法可重载方法,本例使用的重载形式如下:public void Select(int start,int length);

参数说明:start文本框当前选定文本的第一个位置。length选择的字符数。

SelectionColor属性用来获取或设置当前选定文本或插入点的文本颜色。

[BrowsableAttribute(false)]

public Color Selection{get;set;}

属性值:表示当前选定文本或再插入点后输入的文本的颜色的Color。

   private void Form1_Load(object sender, EventArgs e)

        {

            this.richTextBox1.Text = "0123456789522";

            this.richTextBox1.Select(0, 3);//选中钱3个号码

            this.richTextBox1.SelectionColor = Color.Red;

            this.richTextBox1.Select(3, 3);

            this.richTextBox1.SelectionColor = Color.Blue;//显示蓝色

        }

  • TextBox在获取输入焦点的时候自动全选

思路:如果TextBox本身未获得焦点,则点击鼠标左键获得焦点后,执行全选。

如果TextBox本身已经获得焦点,则点击鼠标左键则不再执行全选。

using System;

using System.Collections.Generic;

using System.Windows.Forms;

using System.Globalization;

using System.Drawing;

namespace WindowsFormsApp3

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

            textBox1.Tag = false;

            textBox1.GotFocus += TextBox1_GotFocus;

        }

        private void TextBox1_GotFocus(object sender, EventArgs e)

        {

            textBox1.Tag = true;

            textBox1.SelectAll();//注意1

        }

        private void textBox1_MouseDown(object sender, MouseEventArgs e)

        {

            if (e.Button == MouseButtons.Left && (bool)(textBox1.Tag) == true)

            {

                textBox1.SelectAll();

            }

            textBox1.Tag = false;//取消全选标记

        }

    }

}

注:虽然Mouseup事件已经执行了全选,但代码中“注意1”中的位置,GotFocus事件中我们还需要再执行一次全选,原因事让TextBox获得焦点的方法,除了通过鼠标点击,还可能通过Tab切换焦点实现,此就不会出发Moseup,但也新词不会有Mouseup取消全选的问题,因此再GetFocus事件中还是有必要全选一次。

  • 只能输入数字和小数

   private void textBox1_KeyPress(object sender, KeyPressEventArgs e)

        {

            if (!Char.IsNumber(e.KeyChar) && (!Char.IsPunctuation(e.KeyChar)) && (!Char.IsControl(e.KeyChar)))

            {

                e.Handled = true;

            }

            else if (Char.IsPunctuation(e.KeyChar))

            {

                if (e.KeyChar == '.')

                {

                    if (((TextBox)sender).Text.LastIndexOf('.') != -1)

                    {

                        e.Handled = true;

                    }

                }

                else

                {

                    e.Handled = true;

                }

            }

       }

  • 只能输入不大于两位的正整数

   private void textBox1_KeyPress(object sender, KeyPressEventArgs e)

        {

            if (!((e.KeyChar > '0' && e.KeyChar <= '9') || e.KeyChar == '\b'))

            {

                //如果不是数字值或者左删除键

                e.Handled = true;//不处理当前事件

            }

            else

            {

                //如果文本框的字符串长度大于等于2

                if (((TextBox)sender).Text.Length >= 2)

                {//如果当前键不是左删除键

                    if (e.KeyChar != '\b')

                    {

                        e.Handled = true;//不处理当前事件

                    }

                }

                if (((TextBox)sender).SelectedText.Length <= 2 && ((TextBox)sender).SelectedText.Length >= 1)

                { e.Handled = false; }

            }

       }

  • 只能输入汉字

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)

        {

            Regex rg = new Regex("^[\u4e00-\u9fa5]$");

            if (!rg.IsMatch(e.KeyChar.ToString()) && e.KeyChar != '\b')

            {

                e.Handled = true;

            }

    }

或者

  private void textBox1_KeyPress(object sender, KeyPressEventArgs e)

        {

            Regex rg = new Regex("^[\u4e00-\u9fa5\b]$"); //\b是退格键

            if (!rg.IsMatch(e.KeyChar.ToString()))

            {

                e.Handled = true;

            }

        }

  • 只能输入数字,字符,屏蔽汉字

   private void textBox1_KeyPress(object sender, KeyPressEventArgs e)

        {

            Regex rg = new Regex("^[\u4e00-\u9fa5\b]$"); //\b是退格键

            if (!rg.IsMatch(e.KeyChar.ToString()))

            {

                e.Handled = true;

            }

            else

            {

                if (char.IsLetterOrDigit(e.KeyChar) || e.KeyChar == '\b')

                {

                    e.Handled = false;

                }

                else

                {

                    e.Handled = true;

                }

            }

      }

  • 编写验证类

public   class ValidationRegex

    {

        /// <summary>

        /// 正则表达式字符串。

        /// </summary>

        /// <param name="pattern">正则表达式</param>

        /// <param name="validteString">待验证字符串</param>

        /// <returns></returns>

        private static bool PublicMethod(string pattern, string validteString)

        {

            Regex reg = new Regex(pattern);

            Match match = reg.Match(validteString);

            return match.Success;

        }

        /// <summary>

        /// 验证正整数

        /// </summary>

        /// <param name="validteString"></param>

        /// <returns></returns>

        public static bool ValidteData(string validteString)

        {

            string pattern = "^[+]?\\d+$";

            return PublicMethod(pattern, validteString);

        }

        /// <summary>

        /// 验证正负整数

        /// </summary>

        /// <param name="validteString"></param>

        /// <returns></returns>

        public static bool ValidtePlusMinus(string validteString)

        {

            string pattern = "^([-+]?\\d+)(\\.\\d+)?$";

            return PublicMethod(pattern, validteString);

        }

        /// <summary>

        /// 验证字符和数字

        /// </summary>

        /// <param name="validteString"></param>

        /// <returns></returns>

        public static bool VadidateDataLetter(string validteString)

        {

            string pattern = "^[a-zA-Z0-9]+$";

            return PublicMethod(pattern, validteString);

        }

        /// <summary>

        /// 验证中文字符

        /// </summary>

        /// <param name="validteString"></param>

        /// <returns></returns>

        public static bool ValidateChineseChar(string validteString)

        {

            string pattern = "^[\u4e00-\u9fa5\b]+$";

            return PublicMethod(pattern, validteString);            

        }

        /// <summary>

        /// 验证时间,格式:H:mm:ss

        /// </summary>

        /// <param name="validteString"></param>

        /// <returns></returns>

        public static bool ValidateTime(string validteString)

        {

            string pattern = "^[0-9]{1,2}:[0-9]{2}(:[0-9]{2})?$";

            return PublicMethod(pattern, validteString);

        }

        /// <summary>

        /// 验证固定电话

        /// </summary>

        /// <param name="validteString"></param>

        /// <returns></returns>

        public static bool ValidateTel(string validteString)

        {

            string pattern = "^([0-9]{3,4}-)?[0-9]{7,8}$";

            return PublicMethod(pattern, validteString);

        }

        /// <summary>

        /// 验证手机号

        /// </summary>

        /// <param name="validteString"></param>

        /// <returns></returns>

        public static bool ValidatePhone(string validteString)

        {

            string pattern = "^(13|15|18|17)[0-9]{9}$";

            return PublicMethod(pattern, validteString);

        }

    }

  • 自定义TextBox控件,边框只有一个底部横线。

   public partial class UnderLineTextBox : TextBox

    {

        public UnderLineTextBox()

        {

            this.Width = 180;//设置空间的宽度。

            this.Height = 150;//设置控件的高度

            this.BorderStyle = BorderStyle.None;//设置控件为无边框。

        }

        public const int WM_PAINT = 0x000F;//该变量表示绘制TextBox控件。

        public const int WM_CTLCOLOREDIT = 0x0133;//该变量表示开始编辑TextBox控件的颜色

        /// <summary>

        /// 说明:获取整个窗口的舍本场景

        /// 返回值:执行成功则为窗口设备场景,失败则为0

        /// 使用后,一定要用ReleaseDC释放

        /// </summary>

        /// <param name="hWnd">将获取其折本场景的窗口。</param>

        /// <returns></returns>

        [DllImport("user32.dll")]

        public static extern IntPtr GetWindowDC(IntPtr hWnd);

        /// <summary>

        /// 释放由调用GetDC或GetWindowDC函数获取的指定设备场景,它对类或稀有设备场景无效。

        /// 返回值:执行成功返回1,否则返回0;

        ///

        /// </summary>

        /// <param name="hWnd">要释放的设备场景相关的窗口句柄</param>

        /// <param name="hDc">要释放的设备场景的句柄</param>

        /// <returns></returns>

        [DllImport("user32.dll")]

        public static extern int ReleaseDC(IntPtr hWnd,IntPtr hDc);

        protected override void WndProc(ref Message m)

        {

            base.WndProc(ref m);//处理消息。

            switch (m.Msg)//截获有关TextBox控制的绘制消息。

            {

                case WM_CTLCOLOREDIT://当开始编辑TextBox控件的颜色是

                case WM_PAINT:

                    IntPtr hDc = GetWindowDC(this.Handle);//获取当前窗口的设备场景。

                    if (hDc.ToInt32() != 0)//当场景存在时

                    {

                        using (Graphics g = Graphics.FromHdc(hDc))//声明一个GDI+绘图画类对象

                        {

                            DrawBottomLines(g);//绘制TextBox控件的低端横线

                            g.Dispose();//释放GDI+绘绘图类对象所占用的资源。

                        }

                    }

                    m.Result = IntPtr.Zero;//指定在当前条件下的返回值。

                    ReleaseDC(m.HWnd, hDc);//释放指定设备的场景。

                    break;

            }

        }

        public void DrawBottomLines(Graphics g)

        {//定义一个用于绘制直线和曲线的对象并设定它的颜色和宽度。

            Pen p = new Pen(this.BackColor, 2);

            g.DrawRectangle(p, 1, 1, this.Width - 1, this.Height - 2);//绘制由坐标对、宽和高指定的矩形。

            p = new Pen(Color.FromArgb(0, 0, 0), 1);//定义一个用于绘制的对象,并设定颜色和宽度。

            g.DrawLine(p, 0, this.Height - 1, this.Width, this.Height - 1);//绘制TextBox控件的低端横线。

            p.Dispose();//释放画笔p占用的资源。

        }

  }

文章来源: wanghao.blog.csdn.net,作者:AI浩,版权归原作者所有,如需转载,请联系作者。

原文链接:wanghao.blog.csdn.net/article/details/106207436

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。