WinForm——Text控件总结
目录
1、常用属性:
Text属性是文本框最重要的属性,因为要显示的文本就包含在Text属性中。默认情况下,最多可在一个文本框中输入2048个字符。如果将MultiLine属性设置为true,则最多可输入32KB 的文本。Text属性可以在设计时使用【属性】窗口设置,也可以在运行时用代码设置或者通过用户输入来设置。可以在运行时通过读取Text属性来获得文本框的当前内容。
用来设置文本框允许输入字符的最大长度,该属性值为 0 时,不限制输入的字符数。
用来设置文本框中的文本是否可以输入多行并以多行显示。值为 true 时,允许多行显示。值为false时不允许多行显示,一旦文本超过文本框宽度时,超过部分不显示。
用来决定当焦点离开文本框后,选中的文本是否还以选中的方式显示,值为true,则不以选中的方式显示,值为 false将依旧以选中的方式显示。
用来获取或设置一个值,该值指示文本框中的文本是否为只读。值为 true时为只读,值为 false时可读可写。
是一个字符串类型,允许设置一个字符,运行程序时,将输入到 Text 的内容全部显示为该属性值,从而起到保密作用,通常用来输入口令或密码。
用来设置滚动条模式, 有四种选择: ScrollBars.None (无滚动条), ScrollBars.Horizontal(水平滚动条),ScrollBars.Vertical(垂直滚动条),ScrollBars.Both(水平和垂直滚动条)。
注意:只有当MultiLine属性为true时,该属性值才有效。在WordWrap属性值为true时,
水平滚动条将不起作用
用来获取或设置文本框中选定的字符数。只能在代码中使用,值为0 时,表示未选中任何字符。
用来获取或设置文本框中选定的文本起始点。只能在代码中使用,第一个字符的位置为0,第二个字符的位置为1,依此类推。
用来获取或设置一个字符串,该字符串指示控件中当前选定的文本。只能在代码中使用。
该属性是一个数组属性,用来获取或设置文本框控件中的文本行。即文本框中的每一行存放在 Lines数组的一个元素中。
用来获取或设置一个值,该值指示自创建文本框控件或上次设置该控件的内容后,用户是否修改了该控件的内容。值为true表示修改过,值为 false表示没有修改过。
用来获取控件中文本的长度。
用来指示多行文本框控件在输入的字符超过一行宽度时是否自动换行到下一行的开始,值为 true,表示自动换到下一行的开始,值为false表示不自动换到下一行的开始。
PasswordChar设置成某个特定的字符即可实现密码框。
指示是否启用为控件定的快捷键,将ShortcutsEnabled设置为False既能屏蔽右键也能屏蔽Ctrl+V和Ctrl+C快捷键。
2、常用方法:
把一个字符串添加到文件框中文本的后面,调用的一般格式如下:
文本框对象.AppendText(str) 参数 str是要添加的字符串。
从文本框控件中清除所有文本。调用的一般格式如下: 文本框对象.Clear()该方法无参数。
是为文本框设置焦点。如果焦点设置成功,值为 true,否则为false。调用的一般格式如
下: 文本框对象.Focus()该方法无参数。
将文本框中的当前选定内容复制到剪贴板上。调用的一般格式如下:
文本框对象.Copy()该方法无参数。
将文本框中的当前选定内容移动到剪贴板上。调用的一般格式如下:
文本框对象.Cut()该方法无参数。
用剪贴板的内容替换文本框中的当前选定内容。调用的一般格式如下:
文本框对象.Paste()该方法无参数。
撤销文本框中的上一个编辑操作。调用的一般格式如下:
文本框对象.Undo()该方法无参数。
从该文本框的撤销缓冲区中清除关于最近操作的信息,根据应用
程序的状态,可以使用此方法防止重复执行撤销操作。调用的一般格式如下:
文本框对象.ClearUndo()该方法无参数。
用来在文本框中设置选定文本。调用的一般格式如下:
文本框对象.Select(start,length)
该方法有两个参数,第一个参数start用来设定文本框中当前选定文本的第一个字符的位
置,第二个参数length用来设定要选择的字符数。
用来选定文本框中的所有文本。调用的一般格式如下:
文本框对象.SelectAll()该方法无参数。
3、常用事件
该事件在文本框接收焦点时发生。
该事件在文本框失去焦点时发生。
该事件在Text属性值更改时发生。无论是通过编程修改还是用户交互更改文本框的 Text属性值,均会引发此事件。
4、使用实例
本例主要用到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本身已经获得焦点,则点击鼠标左键则不再执行全选。
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);
}
}
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
- 点赞
- 收藏
- 关注作者
评论(0)