投稿

4月, 2007の投稿を表示しています

TextBoxコントロールにUndo

TextBoxコントロールにCopy/Cut/Paste/Undoを実装する。

元々TextBoxコントロールにはCopy/Cut/Paste/Undoは実装されてるので、ショートカットやコンテキストメニューで使う分には特に何もやらなくてもOK。
でもメニューの項目として実装する場合は次のようにやります。

始めに操作の対象になるアクティブなコントロールを取得し、そのコントロールにCopy/Cut/Paste/Undoの処理を行います。
Copyの処理は以下のような感じになります。

            // アクティブなコントロールの取得
            // フォーム上で現在アクティブなコントロールを取得
Control ctrl = this.ActiveControl;// TextBoxかどうか判定
if (ctrl isTextBox)
            {
               // クリップボードへコピー
                ((TextBox)ctrl).Copy();
            }

さて、TextBoxはともかく、NumericUpDownコントロールなどCopy/Cut/Paste/Undoメソッドが無いものはどうするか?
この場合は対象のコントロールがTextBoxを含んでいるものであればコントロール内を検索してTextBoxを探し出してから同様の処理を行えばOK。

            // アクティブなコントロールの取得
            // フォーム上で現在アクティブなコントロールを取得
Control ctrl = this.ActiveControl;if (ctrl is NumericUpDown)
            {
foreach (Control c in ((NumericUpDown)ctrl).Controls)
                {
if (c isTextBox)
                    {
// クリップボードへコピー
                         ((TextBox)c).Copy();
break;
                    }
                }
            }