メニューとファンクションキーのイベント処理
組み込んだメニューとファンクションキーのイベント処理を作成します。
ファイルを開く処理
ファイルを開く処理は、まず「ファイルを開く」ダイアログでファイル名を取得します。
次に、子フォームのインスタンスを作成して、子フォームに配置してあるRichTextBoxコントロールのLoadFileメソッドでファイルを開きます。これで、ファイルを開くたびに新しい子フォームを作成しそこにファイルの中身を表示します。このとき、ファイル名のフルパスを子フォームのタイトルに表示します。
Private Sub 開くToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 開くToolStripMenuItem.Click Dim fname As String Me.OpenFileDialog1.ShowDialog() fname = Me.OpenFileDialog1.FileName Dim child As New Form2() child.MdiParent = Me child.Show() If fname <> "" Then Try child.RichTextBox1.LoadFile(fname, RichTextBoxStreamType.PlainText) child.Text = fname Catch ex As Exception MessageBox.Show(ex.InnerException.Message) End Try End If End Sub
private void 開くToolStripMenuItem_Click(object sender, EventArgs e) { String fname; openFileDialog1.ShowDialog(); fname = openFileDialog1.FileName; Form2 child = new Form2(); child.MdiParent = this; child.Show(); RichTextBox rtbox = (RichTextBox)child.ActiveControl; if(fname != ""){ try{ rtbox.LoadFile(fname, RichTextBoxStreamType.PlainText); child.Text = fname; }catch(Exception ex){ MessageBox.Show(ex.InnerException.Message); } } }
上書き保存の処理
上書き保存しようとするファイルは、現在アクティブになっている子ウィンドウを対象とします。従って、親フォームのActiveMdiChildプロパティを使って、現在アクティブな子フォームをFormオブジェクトとして取得します。
子フォームのタイトルバーにファイル名のフルパスが表示されているので、後はこれを使ってRichTextBoxクラスのSaveFileメソッドを実行するだけです。
Private Sub 上書き保存ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 上書き保存ToolStripMenuItem.Click Dim activeform As Form = Me.ActiveMdiChild Dim fname As String = activeform.Text Dim richtext As RichTextBox = activeform.Controls(0) richtext.SaveFile(fname, RichTextBoxStreamType.PlainText) End Sub
private void 上書き保存ToolStripMenuItem_Click(object sender, EventArgs e) { Form activeform = this.ActiveMdiChild; String fname = activeform.Text; RichTextBox richtext = (RichTextBox)activeform.Controls[0]; richtext.SaveFile(fname, RichTextBoxStreamType.PlainText); }
ファンクションキーのイベント処理
GcFunctionKeyコントロールは、キーが押されるとFunctionKeyDownというイベントが発生しますので、処理を実行する場合はこのイベントハンドラに作成します。
イベントが発生すると、KeyCodeプロパティに押されたキーが格納されるので、ここで設定したファンクションキーかどうかを判別して処理を実行させます。
Private Sub GcFunctionKey1_FunctionKeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles GcFunctionKey1.FunctionKeyDown If e.KeyCode = Keys.F12 Then Me.Close() End If If e.KeyCode = Keys.F5 Then Me.ActiveMdiChild.Close() End If End Sub
private void gcFunctionKey1_FunctionKeyDown(object sender, KeyEventArgs e) { if(e.KeyCode == Keys.F12){ this.Close(); } if(e.KeyCode == Keys.F5){ this.ActiveMdiChild.Close(); } }
まとめ
GcMdiTabControlコントロールは、簡単にタブ形式のMDIページを作成できるコントロールです。設定も簡単で、すぐにMDIアプリケーションが作れます。
GcFunctionKeyコントロールは、メニューの設定と連動させることができるので、同じ処理コードを書かなくて済むのがうれしいです。ファンクションキーが使えるようになると、アプリケーションの操作性もぐっと上がるのではないでしょうか。