0

C# で小さな Windows フォーム アプリケーションを開発しています。多くのボタンとコンボボックスがあり、クリックすると、リッチテキストボックスの現在のカーソル位置に特定のテキストが追加されます。このテキスト挿入を元に戻す方法はありますか?. richTextBox.Undo() メソッドを試しましたが、リッチ テキスト ボックスに追加された最新のテキストがキーボード経由である場合にのみ機能します。しかし、ボタンやコンボボックスを介した場合は何も起こらず、さらにカーソルも消えてしまいます。これは、ボタンのクリック時にテキストを追加する私の方法であり、元に戻すボタンまたは CTRL+Z をクリックすると元に戻すようにしたい

    private void mybuttonclick(object sender, EventArgs e) 
    {
        // ---------- Method for inserting tags on clicking the POS Tags buttons ---------- //

        Button btn = (Button)sender; // receiving information about which button was clicked.
        string strInsert = "<" + btn.Text + ">" + " "; // inseting '<>' and an extra space at the end of the tag

        // inserting the tag at the current cursor position.

        richTextBox1.Focus();
        int i = richTextBox1.SelectionStart;
        richTextBox1.Text = richTextBox1.Text.Insert(richTextBox1.SelectionStart, strInsert);
        richTextBox1.SelectionStart = i + strInsert.Length;

        // moving the cursor to the next word to be tagged.

        richTextBox1.Focus();
        SendKeys.SendWait("^{LEFT}");
    }

助けが必要です。

よろしく!

4

4 に答える 4

1

The Code Project で利用できる" 元に戻すマネージャー"がいくつかあります

ここに画像の説明を入力

問題を解決する必要がある場合は、例をダウンロードして、自分の要件に合わせて調整する方法を確認します。

于 2012-07-17T15:11:45.427 に答える
1

List<string> はい、リストが挿入と元に戻すロールバックを追跡するように作成できます 。

于 2012-07-17T15:09:01.213 に答える
0

元に戻す/やり直しは簡単ではありません。そこにはさまざまなアプローチがありますが、通常、それらはすべて、ユーザーが実行したアクションを追跡するスタックに要約されます。元に戻すには、最新のアクションをポップし、そのアクションを元に戻す何らかの方法を実行します。

テキストの場合は、次のようにします。

  1. 最初にボックス内のテキストを記録します。
  2. キーを押すと、タイマーを開始/リセットします (たとえば、0.5 秒)。
  3. タイマーが切れると (ユーザーが入力を一時停止したとき)、古いテキストを「元に戻す操作」に保存します。
  4. そのアクションを元に戻すスタックにプッシュします

「元に戻す」場合は、テキスト ボックス内のテキストをステップ 0 で記録したものに戻すだけです。

于 2012-07-17T15:12:28.227 に答える
0

で変数を保持できます

  1. 入力した文字数、または
  2. 最近追加された文字列 (CTRL+z したものを CTRL+y にしたい場合)。

また、複数ステップの CTRL+z が必要な場合は、次のように宣言します

List<String> additions = ...

代わりに、リストに/から要素を.Add(...)'ingおよび.Remove(...)'ingして遊んでください。

于 2012-07-17T15:06:39.640 に答える