WinForm——Text控件总结

简介: WinForm——Text控件总结

目录


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。


tt.png

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控件,边框只有一个底部横线。

tt.png

 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占用的资源。


       }


 }



tt.png

目录
相关文章
|
10月前
|
C# Windows 容器
WPF技术之CheckBox控件
WPF(Windows Presentation Foundation)的CheckBox控件用于表示一个可以选中或取消选中的复选框。
553 0
|
10月前
|
C# Windows
WPF技术之Button控件
WPF(Windows Presentation Foundation)是用于创建 Windows 客户端应用程序的一种技术。在 WPF 中,按钮是常用的控件之一,用于触发某种行为或操作。
221 0
WPF技术之Button控件
|
10月前
|
数据可视化 数据处理 C#
WPF技术之TextBox控件
WPF ProgressBar控件用于显示操作的进度。它提供了一个可视化的进度条,用于表示任务的完成程度
87 0
WPF中给TextBox/TextBlock设置提示文本
WPF中给TextBox/TextBlock设置提示文本
WPF中给TextBox/TextBlock设置提示文本
WPF 点击 Datagrid 中的TextBox 控件获取其所在行的数据
WPF 点击 Datagrid 中的TextBox 控件获取其所在行的数据
|
Web App开发 C#
WPF 实现带标题的TextBox
原文:WPF 实现带标题的TextBox 这篇博客将分享在WPF中如何创建一个带Title的TextBox。首先请看一下最终的效果, 实现思路:使用TextBlock+TextBox来实现,TextBlock用来显示Title。
1200 0
|
C#
WPF 自定义Metro Style窗体
原文:WPF 自定义Metro Style窗体 为了使WPF程序在不同版本的操作系统上保持一致的显示效果,我们需要重写WPF控件样式。这篇博客将展示如何创建一个Metro Style的WPF窗体。 首先先看一下最终窗体的效果图, 通过截图我们可以看出来这个窗体由两部分组成,顶部为最小化和关闭按钮,其他区域为窗体的显示区域。
1286 0
|
C# 存储
WPF 实现跑马灯效果的Label控件,数据绑定方式实现
原文:WPF 实现跑马灯效果的Label控件,数据绑定方式实现 项目中需要使用数据绑定的方式实现跑马灯效果的Label,故重构了Label控件;具体代码如下 using System; using System.
2323 0
|
容器
WPF-Button|IsCancel&&IsDefault
原文:WPF-Button|IsCancel&&IsDefault Button个别属性 IsCancel属性设置为true时会绑定键盘ESC,按下ESC键相当于点击该button。
1099 0
|
C#
WPF中TextBox文件拖放问题
原文:WPF中TextBox文件拖放问题 在WPF中,当我们尝试向TextBox中拖放文件,从而获取其路径时,往往无法成功(拖放文字可以成功)。造成这种原因关键是WPF的TextBox对拖放事件处理机制的不同,具体可参考这篇文章Textbox Drag/Drop in WPF,本文只是介绍如何解决这一问题。
855 0