タブレットPC開発入門 C#編 第21回 エディタを作る その4−編集メニューの追加

このページをDeliciousに追加 このページをはてなブックマークに追加 このページをYahoo!ブックマークに追加

2002年11月29日(金)版

タブレットPC開発入門 C#編 第21回 エディタを作る その4−編集メニューの追加

デスクトップ、ノートブックから、第3のスタイルへ


■コピー&ペーストできなきゃね

 エディタは当然文字列のコピー、カットおよびペーストができなければ話にならない。実はそれらは予めメソッドが用意されていて、非常に簡単に実装できる。

■「カット」メニューの追加

 って言っても美容院じゃないぞ。トップレベレルに「編集」メニューを追加し、その配下にまずは「カット」メニューを追加する。より分かりやすくするなら「切り取り」なんかでも良いだろう。ついでに「コピー」メニューと「ペースト」メニューも追加しておく。「カット」メニューのハンドラには以下のようになる。


private void menuItem7_Click(object sender, System.EventArgs e)
{
textBox1.Cut(); // カット
}

 驚くべきことにTextBoxにはカットのためのCutメソッドが用意されているので、これを呼ぶだけである。Cutメソッドを呼ぶと、現在TextBoxで選択されている文字列が切り取られて、クリップボードに書き込まれる。

■「コピー」メニューの追加

 「コピー」メニューのハンドラは以下のようになる。


private void menuItem8_Click(object sender, System.EventArgs e)
{
textBox1.Copy(); // コピー
}

 コピーのためのCopyメソッドも用意されているので、これを呼び出す。Copyメソッドを呼ぶと、現在TextBoxで選択されている文字列がコピーされて、クリップボードに書き込まれる。

■「ペースト」メニューの追加

 「ペースト」は「貼り付け」のほうが分かりやすいかも知れない。好みのメニュー名をつけていただいて構わない。「ペースト」メニューのハンドラは以下のようになる。


private void menuItem9_Click(object sender, System.EventArgs e)
{
// 文字列に変換可能か
if(Clipboard.GetDataObject().GetDataPresent(DataFormats.Text))
{
textBox1.Paste(); // ペースト
}
}

 Clipboard.GetDataObjectメソッドでクリップボードからデータを取得し、GetDataPresentメソッドでデータが文字列に変換可能かどうか調べる。変換可能な場合はPasteメソッドで現在のカーソル位置にペーストすることになる。

■「やり直し」メニューの追加

 「やり直し」とはアンドゥのことである。いわゆる、緊縛症候群のアレである。それはさておき、「やり直し」メニューのハンドラは以下のようになる。


private void menuItem10_Click(object sender, System.EventArgs e)
{
// やり直し可能かどうか調べる
if(textBox1.CanUndo == true)
{
textBox1.Undo(); // やり直し
textBox1.ClearUndo();
// 同じUndoが複数回行われないようにUndoバッファをクリア
}
}

 CanUndoプロパティでやり直し可能かどうか調べ、もし可能である場合はUndoメソッドで直前の操作を取り消している。取り消したら誤って同じUndoが複数回行われることがないようにUndoバッファをクリアしている。

■実用上問題のないエディタとなった

 ここまで作りこめば実用上ほとんど問題のないエディタになったはずである。これに検索や置換等の機能を作りこめばさらに使えるものとなる。何かの用途に特化したエディタを作るのも悪くない。

 ではまた次回。



タブレットPC開発入門 C#編 第21回 エディタを作る その4−編集メニューの追加

Reported by Allergy


Last-modified: Sun, 24 May 2009 23:45:30 JST (3462d)