はじめに
前回は,フォームデザイナを使ってテキストエディタに見えるようにコントロールを配置しました。メニューアイテムもそのうちのひとつで,「コピー」をクリックするとClipboardクラスを利用してテキストのコピーを行うように実装しました。やり直し機能はTextBoxコントロールのUndoメソッドで実装しました。
「Windows phoneでテキストエディタを作ろう!」の2回目では,「切り取り」「貼り付け」を実装しましょう。今回も実装後のサンプルプログラムを用意しています。
- サンプルプログラム(91KB)
切り取りと貼り付け機能の実装は難しい……
「切り取り」は選択されているテキストを切り取りクリップボードにコピーします。切り取られたテキストはTextBoxから消えます。「貼り付け」はそのクリップボードにコピーされたテキストをTextBoxに貼り付けます。
この「切り取り」と「貼り付け」の実装は若干難しいです。.NET Compact Frameworkでは,デスクトップ版の.NET Frameworkと比べると実装されていないメソッド・プロパティ・イベントが存在しているというのは前回でも書きましたが,今回実装する「切り取り」「貼り付け」に関してもTextBoxコントロールにはそれ用のメソッドが存在しません。
TextBoxコントロールは入力したテキストをTextプロパティを通して取得したり設定したりすることが可能ですが,直接Textプロティの文章を消したり挿入すると,Undoメソッドでは元に戻すことができません。さらにCtrl+Xによる切り取り,Ctrl+Vによる貼り付けと挙動が違ってしまい違和感があります。
それでは困りました。さてどうしましょうか。
.NET Compact FrameworkでWindows メッセージに触れる
Windowsでは,1つのオブジェクトを1つのウィンドウとして扱って,ウィンドウ間を「マウスの座標が変わった」「とあるキーが押された」「再描画の要求」等のメッセージ・パッシングを行っています。このメッセージのことを「Windows メッセージ」と呼びます。Windows Mobileでも同じようにこのWindows メッセージが飛び交っています。
.NET Frameworkでは,基本的に直接Windows メッセージに触れなくてもよいようにと,メソッド化して隠蔽されています。サブセットである.NET Compact Frameworkでは,そのメソッド自体が実装されていないことが多々ありますので,自前で実装しなければいけません。
Microsoft.Windowsce.Forms 名前空間に,C#(マネージドコード)からWindowsメッセージを扱えるようにするMessage構造体とMessageWindowsクラスがあります。試しにコピー機能をClipboardクラスを使わずにWindows メッセージで処理させてみましょう。
参照の追加
Message構造体とMessageWindowsクラスの解説の中に以下の記載があります。| 名前空間 | Microsoft.WindowsCE.Forms |
|---|---|
| アセンブリ | Microsoft.WindowsCE.Forms(Microsoft.WindowsCE.Forms.dll 内) |
Microsoft.WindowsCE.Forms.dllというDLLアセンブリ内に存在していることを指しています。これらのクラスを使うには,Microsoft.WindowsCE.Forms.dllを参照する必要があります。
ソリューション エクスプローラーのプロジェクト以下にある参照設定を右クリックして,ポップアップから参照の追加を選択します。
参照の追加ダイアログが立ち上がりますので,.NETタブからMicrosoft.Windowsce.Formsを探して選択してください。
参照設定にMicrosoft.Windowsce.Formsが追加されているのを確認します。

