SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(PlusPak)

タブページスタイルのMDIフォームを持った簡易エディタを作成する

PlusPak for Windows Forms 5.0JでカスタムデザインのMDIアプリケーションを作る

  • X ポスト
  • このエントリーをはてなブックマークに追加

メニューとファンクションキーのイベント処理

 組み込んだメニューとファンクションキーのイベント処理を作成します。

ファイルを開く処理

 ファイルを開く処理は、まず「ファイルを開く」ダイアログでファイル名を取得します。

 次に、子フォームのインスタンスを作成して、子フォームに配置してあるRichTextBoxコントロールのLoadFileメソッドでファイルを開きます。これで、ファイルを開くたびに新しい子フォームを作成しそこにファイルの中身を表示します。このとき、ファイル名のフルパスを子フォームのタイトルに表示します。

Visual Basic
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
C#
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メソッドを実行するだけです。

Visual Basic
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
C#
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プロパティに押されたキーが格納されるので、ここで設定したファンクションキーかどうかを判別して処理を実行させます。

Visual Basic
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
C#
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コントロールは、メニューの設定と連動させることができるので、同じ処理コードを書かなくて済むのがうれしいです。ファンクションキーが使えるようになると、アプリケーションの操作性もぐっと上がるのではないでしょうか。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
ComponentZine(PlusPak)連載記事一覧

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3175 2009/03/17 12:12

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング