メニューとファンクションキーのイベント処理
組み込んだメニューとファンクションキーのイベント処理を作成します。
ファイルを開く処理
ファイルを開く処理は、まず「ファイルを開く」ダイアログでファイル名を取得します。
次に、子フォームのインスタンスを作成して、子フォームに配置してある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コントロールは、メニューの設定と連動させることができるので、同じ処理コードを書かなくて済むのがうれしいです。ファンクションキーが使えるようになると、アプリケーションの操作性もぐっと上がるのではないでしょうか。

