SHOEISHA iD

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

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

ComponentZine(ComponentOne)

メニューの代わりにファンクションキーで操作する.NETアプリケーションの作成

PlusPak for Windows Forms 6.0JのGcClassicFunctionKeyコントロールを使ったアプリケーションの作成

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

それぞれのキーの実行処理

 各キーの処理も、イベントハンドラの引数「e」のKeyIndexプロパティの値を使って押されたファンクションキーを識別しますが、3つのスタイルとキーセットを使い分けていますから、変数flagの値を使ってどのキーセットの時のキーなのかを判断して処理を組み立てていきます。

※注意

 なお、本プログラムはあくまでもGcClassicFunctionKeyの機能を紹介するサンプルプログラムのため、各キーの処理はあくまでも形だけにとどめています。

Visual Basic
'各ファンクションキーの処理  一部省略している処理があります
        Dim fname As String = ""

        Select Case flag
            Case 0  'ファイル
                Select Case e.KeyIndex
                    Case 1
                        RichTextBox1.Clear()
                    Case (2)
                        If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
                            fname = OpenFileDialog1.FileName
                            RichTextBox1.LoadFile(fname)
                        End If

                    Case 3
                        If fname <> "" Then
                            RichTextBox1.SaveFile(fname)
                        End If
                    Case 4
                        If SaveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
                            RichTextBox1.LoadFile(SaveFileDialog1.FileName, RichTextBoxStreamType.PlainText)
                        End If
                    Case 5
                        PageSetupDialog1.PageSettings = New System.Drawing.Printing.PageSettings
                        PageSetupDialog1.ShowDialog()
                    Case 6
                        PrintDialog1.ShowDialog()
                    Case 7
                        If MessageBox.Show("終了しますか?", "終了", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) = Windows.Forms.DialogResult.OK Then
                            Me.Close()
                        End If

                End Select

            Case 1  '編集
                Select Case e.KeyIndex
                    Case 1
                        RichTextBox1.Undo()
                    Case 2
                        RichTextBox1.Redo()
                    Case 3
                        RichTextBox1.Cut()
                    Case 4
                        RichTextBox1.Copy()
                    Case 5
                        RichTextBox1.Paste()
                    Case 6
                        RichTextBox1.SelectAll()
                    Case 7
                        Dim str As String = RichTextBox1.SelectedText
                        RichTextBox1.Find(str, RichTextBoxFinds.MatchCase)
                End Select

            Case 2  '書式
                Select Case e.KeyIndex
                    Case 1
                        FontDialog1.ShowDialog()
                        RichTextBox1.SelectionFont = FontDialog1.Font
                        RichTextBox1.SelectionColor = fontcolor
                    Case 2
                        ColorDialog1.ShowDialog()
                        fontcolor = ColorDialog1.Color
                        RichTextBox1.SelectionColor = fontcolor
                    Case 3
                        RichTextBox1.SelectionBackColor = Color.Yellow
                    Case 4
                        RichTextBox1.SelectionBackColor = RichTextBox1.BackColor
                    Case 5
                        RichTextBox1.SelectionAlignment = HorizontalAlignment.Left
                    Case 6
                        RichTextBox1.SelectionAlignment = HorizontalAlignment.Center
                    Case 7
                        RichTextBox1.SelectionAlignment = HorizontalAlignment.Right
                End Select
        End Select
    End Sub
End Class
C#
        // 各ファンクションキーの処理  一部省略している処理があります
        String fname = "";

        switch(flag)
        {
            case 0:  //ファイル
                switch(e.KeyIndex)
                {
                    case 1:
                        richTextBox1.Clear();
                        break;
                    case 2:
                        if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                        {
                            fname = openFileDialog1.FileName;
                            richTextBox1.LoadFile(fname);
                        }
                        break;
                    case 3:
                        if (fname != "")
                        {
                            richTextBox1.SaveFile(fname);
                        }
                        break;
                    case 4:
                        if (saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                        {
                            richTextBox1.LoadFile(saveFileDialog1.FileName, RichTextBoxStreamType.PlainText);
                        }
                        break;
                    case 5:
                        pageSetupDialog1.PageSettings = new System.Drawing.Printing.PageSettings();
                        pageSetupDialog1.ShowDialog();
                        break;
                    case 6:
                        printDialog1.ShowDialog();
                        break;
                    case 7:
                        if(MessageBox.Show("終了しますか?", "終了", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) == System.Windows.Forms.DialogResult.OK)
                        {
                            this.Close();    
                        }
                        break;
                }
                break;

            case 1:  //編集
                switch(e.KeyIndex)
                {
                    case 1:
                        richTextBox1.Undo();
                        break;
                    case 2:
                        richTextBox1.Redo();
                        break;
                    case 3:
                        richTextBox1.Cut();
                        break;
                    case 4:
                        richTextBox1.Copy();
                        break;
                    case 5:
                        richTextBox1.Paste();
                        break;
                    case 6:
                        richTextBox1.SelectAll();
                        break;
                    case 7:
                        string str = richTextBox1.SelectedText;
                        richTextBox1.Find(str, RichTextBoxFinds.MatchCase);
                        break;
                }
                break;

            case 2:  //書式
                switch(e.KeyIndex)
                {
                    case 1:
                        fontDialog1.ShowDialog();
                        richTextBox1.SelectionFont = fontDialog1.Font;
                        richTextBox1.SelectionColor = fontcolor;
                        break;
                    case 2:
                        colorDialog1.ShowDialog();
                        fontcolor = colorDialog1.Color;
                        richTextBox1.SelectionColor = fontcolor;
                        break;
                    case 3:
                        richTextBox1.SelectionBackColor = Color.Yellow;
                        break;
                    case 4:
                        richTextBox1.SelectionBackColor = richTextBox1.BackColor;
                        break;
                    case 5:
                        richTextBox1.SelectionAlignment = HorizontalAlignment.Left;
                        break;
                    case 6:
                        richTextBox1.SelectionAlignment = HorizontalAlignment.Center;
                        break;
                    case 7:
                        richTextBox1.SelectionAlignment = HorizontalAlignment.Right;
                        break;
                }
                break;
            }
         }
     }
}

まとめ

 ファンクションキーは、直観的にかつ1回キーを押すだけで機能が使えるため、メニューに深い階層を組み込む際に上手に使えば、アプリケーションのアクセス性を高めることができます。

 GcClassicFunctionKeyは、本アプリケーションでも使用したように複数のスタイルセットやキーセットを使うことができ、それぞれのキーにテキストとアイコンを表示させることができるため、メニューやツールボックスと同じような使い方ができます。

 Windowsになってからファンクションキーはあまり使われなくなっていますが、GcClassicFunctionKeyコントロールを使って、キー1つで思い通りに操作できるユーザーインターフェイスを持ったアプリケーションを作ってみてはいかがでしょうか。

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

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

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6718 2012/08/22 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング