リッチテキストボックスの一つ前の処理を正しく表示するには?

解決


ゴロベエ  2004-11-11 02:38:43  No: 117496

VB.NET2003 Windows2000環境です。

ボタン1にRichTextBox1.Undoを記述しています。
リッチボックステキストに適当な文字列を入力して、バックスペースで数文字削除して、ボタン1を押すと削除した文字列の行が削除されてしまいます。
どのようにすれば、ボタン1を押したときに削除した文字を復活できるのでしょうか?

ご回答のほど、よろしくお願いいたします。


ねろ  2004-11-11 07:15:21  No: 117497

>どのようにすれば、ボタン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


ゴロベエ  2004-11-11 18:31:54  No: 117498

ねろさん返答ありがとうございます。
返事が遅れてすいません。

>私は昔からこれはバグではないかと思っています。
仕様だったらしょうがないですね。

APIを使用しないとできないのですか・・・
APIはまだ扱い方がいまいち理解できていないので、
ねろさんのソースをコピーさせていただいて動かしました。
直前の動作に戻ったんですが、その前以降の動作は削除されていました^^;

もう少し勉強しないと完全に思っている動作をさせることは難しそうです。
ねろさん本当にありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加