皆様のおかげでこのメールマガジン「.NETプログラミング研究」が「まぐまぐ!」で殿堂入りしました。これからも「.NETプログラミング研究」をよろしくお願いいたします。「.NET質問箱」では、「どぼん!のプログラミング掲示板」に書き込まれた.NETプログラミングに関する投稿を基に、さらに考察を加え、Q&A形式にまとめて紹介します。注意この記事の最新版は「コントロールで矢印、Tab、Enter、Escキーが押されたことを知る」で公開しています。【質問】System.Windows.Forms.ButtonコントロールのKeyDownイベントで矢印キーの押下を捕捉しようとしたのですが、できませんでした。Buttonコントロールで矢印キーが押されたことを知る方法はありますか?【回答】System.Windows.Forms.ButtonクラスのProcessDialogKeyメソッド(あるいはProcessCmdKeyメソッド等)をオーバーライドすれば、矢印キーやTab、Enter、Escキーが押されたことを知ることができます。次のようなSystem.Windows.Forms.Buttonクラスの派生クラスを作成し、ProcessDialogKeyメソッドをオーバーライドします。ここでは、左キーが押された時に、メッセージボックスを表示するようにしています。MessageBox.Show("左キーが押されました。MessageBox.Show("左キーが押されました。}}この様にして作成したMyButtonクラスをSystem.Windows.Forms.Buttonクラスの代わりに使うようにします。具体的には、"System.Windows.Forms.Button"を"MyButton"に文字列置換すれば大抵の場合大丈夫でしょう。注意この記事の最新版は「Buttonコントロールにフォーカスがあるとフォームで矢印キーのキーイベントが発生しない」で公開しています。【質問】フォームのKeyPreviewプロパティをtrueにして、KeyDownやKeyUpなどのキーイベントをフォームで受け取るようにしています。Buttonコントロールにフォーカスがあると矢印キーやタブキーの押下でキーイベントが発生しません。矢印キーが押されたかをフォームで知る場合は、先の「Buttonコントロールで矢印キーが押されたことを知るには?」と同様に、フォームクラスのProcessDialogKeyメソッドをオーバーライドします。この場合はフォームデザイナで作成されたコードを変更する必要が無いため、先の方法より簡単です。具体的には、次のようなコードをフォームクラスに追加します。この例では、左キーとタブキーが押された時に、メッセージボックスを表示するようにしています。MessageBox.Show("左キーが押されました。MessageBox.Show("Tabキーが押されました。MessageBox.Show("左キーが押されました。MessageBox.Show("Tabキーが押されました。base.ProcessDialogKey(keyData);}なおタブキーが押されたかを調べる場合は、ButtonのあるフォームのProcessTabKeyメソッドをオーバーライドする方法もあります。フォームクラスに次のようなコードを追加することにより、Tabキーが押された時にメッセージボックスを表示し、次のコントロールがアクティブにならないようにすることができます。MessageBox.Show("Tabキーが押されました。MessageBox.Show("Tabキーが押されました。注意この記事の最新版は「画面をキャプチャする」で公開しています。ScreenキーストロークをSendKeys.SendWait(またはSend)メソッドで送信し、クリップボードにコピーされたイメージを取得する方法です。Ctrl+PrintScreenキーストローク("^{PRTSC}")で画面全体がキャプチャされ、Alt+PrintScreenキーストローク("%{PRTSC}")でアクティブなウィンドウがキャプチャされます(PrintScreenキーストロークのみでもアクティブなウィンドウがキャプチャされるようです)。この方法では確実に画面のイメージを取得できる保障はありません(実際に失敗することも多いようです)。(今後使用するために予約されている)」と書かれています。メソッドこの方法により画面全体のイメージを取得し、PictureBox(PictureBox1)に表示するサンプルを以下に示します。APIを使うことになります。この方法関しては、ウェブ上で優れたサンプルがいくつも公開されています。その一部を紹介します。以下はC#のサンプルです。Fusion以下はVB.NETのサンプルです。Screen以下に画面全体をキャプチャするメソッド(CaptureScreen)と、アクティブなウィンドウをキャプチャするメソッド(CaptureActiveWindow)のごく簡単なサンプルを紹介します。注意この記事の最新版は「複数のRTFファイルを連結してRichTextBoxに表示する」で公開しています。複数のRTFファイルを連結したくて、RTFファイルをテキストとして読み込み、文字列を連結し、RichTextBoxのRtfプロパティに代入したのですが、うまくいきません。複数のRTFファイルを連結してRichTextBoxに表示するにはどのようにすればよいのでしょうか?【回答】RichTextBoxにRTFを挿入するには、RichTextBox.SelectedRtfプロパティを使用しますが、RTFファイルのテキストをSelectedRtfプロパティに代入することにより、そのフォーマットされた内容がRichTextBoxに挿入されます。複数のRTFファイルを連結してRichTextBoxに表示するには、RTFファイルをテキストとして読み込み、RichTextBoxのSelectionStartを末尾にし、SelectedRtfにRTFファイルのRTFを設定するという作業を繰り返せばよいということになります。次にRTFファイル"C:\1.rtf"、"C:\2.rtf"、"C:\3.rtf"を連結し、RichTextBox(RichTextBox1)に表示するコードを示します。