Go homepage(回首页)
Upload pictures (上传图片)
Write articles (发文字帖)

The author:(作者)qq
published in(发表于) 2014/7/9 22:36:01
C#中的编辑控件(Edit Box)

C#中的编辑控件(Edit Box)

编辑控件(Edit Box)

1.概述

编辑控件(Edit Box)又称文本框,也是在程序开发过程中经常使用的控件,通常编辑控件与静态文本一起使用,用于数据的输入或输出。编辑控件提供了完整的键盘输入和编辑功能,可以输入各种文本、数值或密码,并可以进行剪切、粘贴等操作,当一个编辑控件获得焦点时,框内会出现一个闪动的插入符。

编辑控件支持单行编辑和多行编辑,由Multline属性决定。编辑框其他常用属性有:Number表示只能输入数字,Password表示键入编辑框的字符都显示掩码“*”,用于输入密码。Border用于设置控件的边框,Uppercase或Lowercase表示键入编辑框的字符全部转换成大写或小写形式,Read-Only表示只能输入数据。

当编辑框的文本被修改时,它会向其父窗口发送EN_CHANGE消息;当字符数目达到限定值时发送EN_MAXTEXT消息;当编辑框中的文本被修改且新的文本没有显示之前发送EN_UPDATE消息。

编辑控件对应的MFC中的CEdit类,这个类中常用的成员函数如表1所示。



表1 CEdit类中常用的成员函数

2.扩展的编辑控件类

编辑控件提供了属性Number,可以用它限制用户输入的文本是数值。但美中不足,Number属性被选中的编辑控件不支持小数,这无疑是数据库应用软件所不允许的。下面介绍一种扩展的编辑控件类CExpandEdit,它支持小数的输入。另外,这个控件类还支持当用户按下回车时,将焦点移动到Tab键顺序为当前控件顺序加1的控件上。

分析:

这两个问题都非常简单,当用户输入一个字符时,会产生一个KEYDOWN消息,读者需要先将这个消息截获,然后判断输入的字符是否是0~9的数字或“.”,如果不是,不让这个消息执行;如果为回车,就向系统发送Tab,这样,系统会认为是Tab,就会执行Tab键按下时的动作。

下面是这个类的原型:

class CExpandEdit : public CEdit

{

public:

CExpandEdit();

public:

void SetNumbrOnly(bool bOnly=true); //设置是否启动只输入数字(包括".")的功能

virtual ~CExpandEdit();

private:

bool m_NumberOnly; //记录是否启动功能的成员变量

};

当用使用SetNumbrOnly()函数时,将成员变量m_NumberOnly设置为True,表示用户已经启动了只输入数字(包括“.”)功能。

void CExpandEdit::SetNumbrOnly(bool bOnly)

{

m_NumberOnly=bOnly;

}

下面是此类的关键,重载虚函数PreTranslateMessage(),用它来处理发送给对话框的消息。

BOOL CExpandEdit::PreTranslateMessage(MSG* pMsg)

{

if(pMsg->message==WM_KEYDOWN)

{

if(pMsg->wParam==13)

{

pMsg->wParam=9; //"Tab"

return CEdit::PreTranslateMessage(pMsg);

}

if((pMsg->wParam<48 || pMsg->wParam>57)&&

pMsg->wParam!=190 && //"."

pMsg->wParam!=13 && //"Enter"

pMsg->wParam!=8&& //"Back Space"

m_NumberOnly==true)

//小键盘

if(pMsg->wParamwParam>VK_NUMPAD9 &&

pMsg->wParam!=110) //小键盘上的"."

pMsg->wParam=VK_CONTROL;

}

return CEdit::PreTranslateMessage(pMsg);

}

运行效果如图1所示。



图1 CExpandEdit类的使用




If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)





QQ:154298438
QQ:417480759