怎样使Text文本框控件具备"撒消"和"恢复"功能,跟Excel那样.

chinasuperboy 2007-09-09 08:44:15
如题所示,谢谢指教.
...全文
250 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lady_eric 2007-09-24
  • 打赏
  • 举报
回复
以下代码,在窗体中有三个控件,一个textbox控件,名为text1,两个按钮控件,名字分别为command1(caption为"撤销")和command2(caption为"恢复")

先看看能不能看懂,不懂再发帖子吧
'******************************

Dim N As Long '键盘输入的字符个数
Dim P As Long '记录撤销的个数
Dim Q As Long '记录恢复的个数
Dim ST(), HF() 'ST()是存储键盘输入的字符,HF()是存储撤销的字符
Dim M As Long '撤销和恢复的最大个数
'****************以上是通用里的变量定义



Private Sub Command1_Click()
P = P + 1
If P <= 5 And Text1.Text <> "" Then
ReDim Preserve HF(P)
HF(P) = Mid(Text1.Text, Len(Text1.Text), 1)
Text1.Text = Mid(Text1.Text, 1, Len(Text1.Text) - 1)
Q = UBound(HF)
End If

End Sub

Private Sub Command2_Click()
If Q >= 1 Then
Text1.Text = Text1.Text + HF(Q)
End If
Q = Q - 1
P = 0
End Sub

Private Sub Form_Load()
N = 0
M = 5
ReDim ST(M)
P = 0
Q = 0
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim M As Long
Dim i As Long, j As Long
N = N + 1
If N <= M Then
ST(N) = Chr(KeyAscii)
Else
For i = 1 To M - 1
ST(i) = ST(i + 1)
Next i
ST(M) = Chr(KeyAscii)
N = M
End If

P = 0
ReDim HF(0)
Q = 0
End Sub

chinasuperboy 2007-09-23
  • 打赏
  • 举报
回复
想到我头晕晕,请问可以给个实例吗
Lady_eric 2007-09-19
  • 打赏
  • 举报
回复
看你怎么撤销了,如果是这样,你向一个文本框里面送数据或者字符,那么你可以利用文本框的
keypress事件,接受键盘的数据或字符,然后用一个变量存储目前文本框中的字符(数据也可以当作字符,便于今后的撤销操作,撤销一次,这个字符串的右边就少一个字符)。另外再定义一个可变维数的数组,用于存储你每次键盘输入的字符(便于今后的恢复操作)。你可以试试!
chinasuperboy 2007-09-16
  • 打赏
  • 举报
回复
请问用数组怎样实现?
bbhere 2007-09-11
  • 打赏
  • 举报
回复
api不知道,同意一楼的方法,用变量保存
jieweibin 2007-09-11
  • 打赏
  • 举报
回复
'用API,不过下面的代码只能做到单步撤消
'说明:
Dim fb As Long

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Const WM_CUT = &H300 '剪切
Const WM_COPY = &H301 '复制
Const WM_PAST = &H302 '粘贴
Const WM_CLEAR = &H303 '清除
Const WM_UNDO = &H304 '撤消

Private Sub Command1_Click()
fb = SendMessage(text1(index1).hWnd, WM_UNDO, 0, 0)
End Sub
熊孩子开学喽 2007-09-11
  • 打赏
  • 举报
回复
这个其实挺麻烦,需要使用一个变量来保存历史记录。
比较简单的方法是放在控件的TAG属性里。

如果要做到多步撤销的话,还要使用数组,当然,也可以放在TAG里面。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧