VB.NET2003 Windows2000環境です。
ボタン1にRichTextBox1.Undoを記述しています。
リッチボックステキストに適当な文字列を入力して、バックスペースで数文字削除して、ボタン1を押すと削除した文字列の行が削除されてしまいます。
どのようにすれば、ボタン1を押したときに削除した文字を復活できるのでしょうか?
ご回答のほど、よろしくお願いいたします。
>どのようにすれば、ボタン1を押したときに削除した文字を復活できるのでしょうか?
どこにも書いてないし、誰も言わないけれど、
私は昔からこれはバグではないかと思っています。
が、たぶん「これは仕様です」と言われるで仕様(ダジャレ)。(^^;
つまりRichTextBoxのUnDoバッファのクリアータイミングは普通の
TextBoxと違うのです。VB.NETでも変わっていません。なぜかな?
どうしてもやりたい場合はSendMessageを使って自分でUnDoバッファを
クリアーする事です、とほほ。。。
Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As IntPtr, ByVal wMsg As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Integer
Private Const EM_UNDO As Short = &HC7s
Private Const EM_EMPTYUNDOBUFFER As Short = &HCDs
Private Sub Command1_Click(ByVal sender As System.Object, ByVal _
e As System.EventArgs) Handles Command1.Click
RichTextBox1.Undo()
End Sub
Private Sub RichTextBox1_KeyDown(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyEventArgs) Handles RichTextBox1.KeyDown
If e.KeyCode = 8 Then
'UnDoバッファのクリアー
SendMessage(RichTextBox1.Handle, EM_EMPTYUNDOBUFFER, 0, 0)
End If
End Sub
ねろさん返答ありがとうございます。
返事が遅れてすいません。
>私は昔からこれはバグではないかと思っています。
仕様だったらしょうがないですね。
APIを使用しないとできないのですか・・・
APIはまだ扱い方がいまいち理解できていないので、
ねろさんのソースをコピーさせていただいて動かしました。
直前の動作に戻ったんですが、その前以降の動作は削除されていました^^;
もう少し勉強しないと完全に思っている動作をさせることは難しそうです。
ねろさん本当にありがとうございました。
ツイート | ![]() |