实用的TextBox控件的Undo属性

控件

很少有VB开发人员注意到文本框(TextBox)控件具有Undo属性,但这一属性却给程序员带来方便。这是一个相当出色的特性,在很多需要编辑文本或者图形的商业软件的开发中都使用到。许多程序都需要多级别的撤消,或者有些程序需要“重新操作”而取消最后一步的操作,这些繁琐的要求都需要复杂的编程设计,但TextBox控件的一个简单的Undo属性就可以很容易地实现这些过程。

由于Undo功能是属于文本框控件,你所需要的是向控件发送一个“undo youself”的消息。这一过程可以使用API函数SendMessage来实现。这一函数的声明为:

Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByValhWnd As Long, _
ByValwMsg As Long, ByValwParam As Long, _
lParam As Any) As Long

第一个参数是接受消息的句柄,在本例中为TextBox控件的hWnd属性。

第二个参数是识别消息的数字。为了能够撤消某一操作,通常传递&HC7值,这也是代表着EM_UNDO常量。

第三个和第四个参数可用于某些消息,但在本例中它没有被使用,你可以将它们置为0。

函数返回的值取决于发送的消息。在本例中可以被省略。

为了能真正使用这一技巧,建立一个带有一个窗体的工程,窗体中包含一个TextBox控件和一个Command按钮控件。在Command按钮控件的点击事件程序中添加以下代码行:

SendMessage Text1.hWnd, EM_UNDO, 0&, 0&

在工程中添加一个模块并在模块中添加如下的代码:

Public Const EM_UNDO = &HC7
Public Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" (ByValhWnd As Long, _
ByValwMsg As Long, ByValwParam As Long, _
lParam As Any) As Long

当运行这一工程时,在TextBox控件中输入和编辑文本。可以看到,按钮撤消了最后一步的操作。如果没有什么东西可以撤消,消息就不会起作用。你可以将Undo属性作为一个菜单命令以影响文本框的激活,如下所示:

If TypeOfActiveControl Is TextBox Then
SendMessageActiveControl.hWnd, EM_UNDO, 0&, 0&
End If

如果一个文本框没有被激活,按钮就不会执行任何操作。

TextBox控件的Undo属性是一个具有吸收力和友好的特性,并且使用起来非常的简单。

时间: 2024-11-13 06:37:51

实用的TextBox控件的Undo属性的相关文章

TextBox控件的Text属性代表的字符串是属于uncode编码的么?

问题描述 TextBox控件的Text属性代表的字符串是属于uncode编码的么? 请问Visula Basic 6.0语言中TextBox控件的Text属性代表的字符串是属于uncode编码的么?怎么判断它内容的编码呢? 解决方案 VB内置的string都是unicode的. 解决方案二: vb中对于一个字符串来说,读入时本地缺省语言的对应关系将之转换为Unicode,输出时,再从Unicode转换为本地编码. 不是显示的,都是unicode编码方式

ASP.NET的B/S项目中的textbox控件中是否有象c/s项目下的TextBox控件的Tag属性那样,

问题描述 例如前台录入界面,在textbox中,我让用户点一个按钮跳一个窗口,选择相应的信息后返回项目名和项目ID,将项目名赋给textbox.text,项目ID赋给textbox.tag,窗体提交后后台取textbox.tag插入到数据库即可. 解决方案 解决方案二:沒有tag属性但是你可以利用其他属性,或者自定义属性来用

asp.net 动态创建TextBox控件及状态数据如何加载_实用技巧

接着上文Asp.net TextBox的TextChanged事件你真的清楚吗? 这里我们来说说状态数据时如何加载的.虽然在Control中有调用状态转存的方法,但是这里有一个判断条件 if (_controlState >= ControlState.ViewStateLoaded) 一般的get请求这里的条件是不满足的. 复制代码 代码如下: internal enum ControlState { Constructed, FrameworkInitialized, ChildrenIni

textbox控件-textBOX控件的属性设置

问题描述 textBOX控件的属性设置 VS2010中 textBOX控件怎么改成椭圆形的呢? 边角不是方的,是椭圆的那种 解决方案 VS2008以上自带,也可以从微软网站下载. 解决方案二: 自定义个组件吧,重绘textbox,绘制边框为非矩形 如果是wpf就简单了 解决方案三: 用VBPowerPack中的shape控件做一个圆角矩形,里面白色的形状 再把textBox放在里面,设置边框样式为无.即可. 解决方案四: 贴个截图看一下呢.... 解决方案五: 未运行 运行后

动态创建多个textbox控件后如何获取控件的各种属性

问题描述 for(inti=0;i<3;i++){TextBoxtb=newTextBox();tb.Name="tb"+i.ToString();tb.Top=50+i*30;tb.Left=20;this.Controls.Add(tb);}这样创建好三个textbox控件后,name分别为tb0,tb1,tb2.可是却不能调用这些控件像调用可视化创建的textbox1之类的控件一样.怎么才能使用控件的name调用这些控件. 解决方案 解决方案二:((TextBox)this

asp.net TextBox控件设置ReadOnly后,不能回传。_实用技巧

很奇怪,以前都没有过这样的怪问题,在别人机器上都能正常,想到可能和ASP.NET的版本有关系. 我用的是 ASP.NET 2.0,当改成 ASP.NET 1.0,就正常了,TextBox控件ReadOnly=True,能回传. 在 ASP.NET 1.0 中是ReadOnly=True会回传的. 在 ASP.NET 2.0 中是ReadOnly=True就不会回传了. 解决的方法: <asp:textbox id="Username" runat="server&quo

创建具有自验证功能的textbox控件

创建|控件     导言        在强大的.NET面前,我有很多的想法,我希望asp.net的web控件内建有验证功能,而不需要在页面中插入太多的验证控件以致代码混乱!现在我们将可以利用.NET来创建一个只允许输入整型数字的的textbox控件或只允许输入货币型数据的textbox控件,等等.当然了,你还可以特别指定textbox控件可否为空或者是否在一个范围内,等等,另外,当我们输入的数据符合要求时,还可以返回一个值,以方便我们觉得是否要干预,甚至我们可以让它运行的时候根据输入数据是否符

反射应用之一:根据控件名、属性名进行取值和赋值

控件 '必须引用命名空间System.Reflection,System.ComponentModel '以下根据控件名和属性名取值 Public Function GetValueControlProperty(ByVal ClassInstance As Object, ByVal ControlName As String, ByVal PropertyName As String) As Object Dim Result As Object Dim myType As Type = C

vb.net的Textbox控件

TextBox(文本框)控件也是在应用程序中经常要用到的控件之一,主要用来在程序运行时接受用户输入,也可以显示运行的结果,以完成用户与程序的交互.TextBox控件在工具箱中的图标如图所示: TextBox是一种通用控件,可以由用户输入文本或显示文本.除非把TextBox的Locked属性设为true,否则不能用TextBox显示不希望用户更改的文本.TextBox中显示的实际文本是受Text属性控制的.Text属性可用三种方式设置:设计时在"属性"窗口进行.运行时通过代码设置或在运行