2番目のキーセットの作成
今度は、もう1つキーセットを作成します。GcClassicFunctionKeyコントロールは、複数のキーセットを持たせることができます。このプログラムでは2つのキーセットを作成し、[Shift]または[Ctrl]キーを押すと、2種類のファンクションキーを交互に表示するようにします。
キーセットの追加と設定
まずは、キーセットをもう1つ追加します。
- GcClassicFunctionKeyコントロールのタスクメニューから「キーセットを設定」を選びます。
- 「KeySets」コレクションエディタが表示されるので、[追加]ボタンをクリックします。もう1つキーセットが追加され、「KeySet1」という名前が付けられます。
- エディタにある[ボタン配列]ボタンをクリックします。「キーセット」エディタが表示されるので、先ほどと同様に「F1~F4」を残してそれ以外のキーを下のペインにドラッグ&ドロップします。
- 4つのボタンそれぞれに次のプロパティを設定します。
ボタン Text ImageIndex ToolTipText F1 印刷 アイコンのインデックス番号 プリンタに印刷します。 F2 開く アイコンのインデックス番号 ファイルからデータを読み込みます。 F3 新規作成 アイコンのインデックス番号 新しい文書を作成します。 F4 ヘルプ アイコンのインデックス番号 ヘルプを表示します。 - 設定したらエディタを閉じ、タスクメニューの「使用するキーセット」で「KeySet1」を選ぶと、作成したキーセットが表示されます。
「KeySet1」のキーセットを選択すると作成したキーセットが表示される

2番目のスタイルの設定
このキーセットには、最初に作成したキーセットのスタイル「ThreeDStyleSet」が適用されています。同じスタイルでは見た目も間違えそうなので、違うスタイルを作成して設定することにします。
- GcClassicFunctionKeyコントロールのタスクメニューから「スタイルセットを設定」を選択します。
- 「StyleSets」コレクションエディタで、「追加」ボタンの横にある[▼]ボタンをクリックして「PopupStyleSet」を選びます。スタイルには「PopupStyleSet1」という名前が付けられています。
- 次のプロパティを変更します。
プロパティ 設定値 機能 AlignHorizontal Center ボタン表面の文字の水平方向の位置 BackColor 255,255,192 ボタン全体の背景色 - 「StyleSets」コレクションエディタを閉じてタスクメニューに戻り、「使用するスタイルセット」プロパティで「PopupStyleSet1」を選びます。これで、今設定したスタイルが適用されます。
作成した「PopupStyleSet1」を選択すると、スタイルが適用される

- 「使用するキーセット」を「Default」に、「使用するスタイルセット」を「ThreeDStyleSet1」に戻しておきます。
キーセットの切り替えと押されたキーの処理-イベント処理
キーセットとスタイルが2つできたので、これを切り替える処理と押されたキーの処理を作成します。これには2つのイベントを使用します。
まず、キーセットは[Shift]または[Ctrl]キーを押下するたびに切り替わるようにします。これらのキーが押されると、GcClassicFunctionKeyコントロールには、「ShiftStateDown」というイベントが発生します。また、ファンクションキーが押されると、「FunctionKeyPress」というイベントが発生します。それぞれの処理は、これらのイベントハンドラに作成します。
キーセットの切り替え処理
2つのキーセットを切り替える処理は、まずクラスのメンバ変数を論理型で用意し、この変数の値を使って現在のキーセットを入れ替えます。
今回使用するキーセットでは、GcClassicFunctionKeyコントロールの「ActiveKeySet」プロパティを使用します。ここに、表示したいキーセット名を設定します。また、使用するスタイルは、ActiveStyleSetプロパティにスタイル名を設定します。
Public flag As Boolean = True
Private Sub GcClassicFunctionKey1_ShiftStateDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles GcClassicFunctionKey1.ShiftStateUp
If flag = True Then
GcClassicFunctionKey1.ActiveKeySet = "KeySet1"
GcClassicFunctionKey1.ActiveStyleSet = "PopupStyleSet1"
flag = False
Else
GcClassicFunctionKey1.ActiveKeySet = "Default"
GcClassicFunctionKey1.ActiveStyleSet = "ThreeDStyleSet1"
flag = True
End If
End Sub
private Boolean flag = true;
private void gcClassicFunctionKey1_ShiftStateDown(object sender, KeyEventArgs e)
{
if(flag == true)
{
gcClassicFunctionKey1.ActiveKeySet = "KeySet1";
gcClassicFunctionKey1.ActiveStyleSet = "PopupStyleSet1";
flag = false;
}
else
{
gcClassicFunctionKey1.ActiveKeySet = "Default";
gcClassicFunctionKey1.ActiveStyleSet = "ThreeDStyleSet1";
flag = true;
}
}
押されたキーの処理
ユーザーがいずれかのファンクションキーを押すと、GcClassicFunctionKeyコントロールには「FunctionKeyPress」イベントが発生します。どのキーが押されたのかは、イベントハンドラの引数「e」を使用します。この引数には、「FunctionKeyPressEventArgs」クラスのインスタンスが格納され、次のメンバプロパティを利用できます。
| 名前 | 説明 |
|---|---|
| Alt | [Alt]キーが押されたかどうかを示す値を取得します。 |
| Control | [Control]キーが押されたかどうかを示す値を取得します。 |
| Handled | イベントが処理されたかどうかを示す値を取得します。 |
| Key | 押されたボタンに対応するキーボード上のキーを取得します。 |
| KeyIndex | 押されたボタンに対応するKeyItemオブジェクトのKeySet内でのインデックスを取得します。 |
| Modifiers | 修飾子キー([Ctrl]、[Shift]、および[Alt])の中で、どのキーの組み合わせが押されたのかを示す値を取得します。 |
| Shift | [Shift]キーが押されたかどうかを示す値を取得します。 |
このうち、KeyIndexプロパティを使用すると、ファンクションキーに設定したインデックス番号を取得できるので、これを使って押されたキーを識別します。
インデックス番号は、それぞれのファンクションキーに設定されているButtonIndexプロパティの値で、KeySetsコレクションエディタで確認・設定ができます。また、2つのキーセットの各キーのインデックス番号が同じ場合は、どちらのキーセットのキーが押されたのかを「ActiveKeySet」プロパティで把握できるので、これで押されたキーの処理を振り分けます。
ここでは、キーが押されるとStatusStripコントロールのラベルに情報を表示するようにしています。
Private Sub GcClassicFunctionKey1_FunctionKeyPress(ByVal sender As System.Object, ByVal e As GrapeCity.Win.Bars.FunctionKeyPressEventArgs) Handles GcClassicFunctionKey1.FunctionKeyPress
If Me.GcClassicFunctionKey1.ActiveKeySet = "Default" Then
Select Case e.KeyIndex
Case 0
ToolStripStatusLabel1.Text = "保存しました"
Case 1
ToolStripStatusLabel1.Text = "データをコピーしました"
Case 2
ToolStripStatusLabel1.Text = "データを貼り付けました"
Case 3
ToolStripStatusLabel1.Text = "データを切り取りました"
End Select
ElseIf Me.GcClassicFunctionKey1.ActiveKeySet = "KeySet1" Then
Select Case e.KeyIndex
Case 0
ToolStripStatusLabel1.Text = "印刷しました"
Case 1
ToolStripStatusLabel1.Text = "ファイルを開きました"
Case 2
ToolStripStatusLabel1.Text = "新しい文書を作成しました"
Case 3
ToolStripStatusLabel1.Text = "ヘルプを表示しました"
End Select
End If
End Sub
private void gcClassicFunctionKey1_FunctionKeyPress(object sender, FunctionKeyPressEventArgs e)
{
if(gcClassicFunctionKey1.ActiveKeySet == "Default")
{
switch (e.KeyIndex)
{
case 0:
toolStripStatusLabel1.Text = "保存しました";
break;
case 1:
toolStripStatusLabel1.Text = "データをコピーしました";
break;
case 2:
toolStripStatusLabel1.Text = "データを貼り付けました";
break;
case 3:
toolStripStatusLabel1.Text = "データを切り取りました";
break;
}
}else if(gcClassicFunctionKey1.ActiveKeySet == "KeySet1")
{
switch(e.KeyIndex)
{
case 0:
toolStripStatusLabel1.Text = "印刷しました";
break;
case 1:
toolStripStatusLabel1.Text = "ファイルを開きました";
break;
case 2:
toolStripStatusLabel1.Text = "新しい文書を作成しました";
break;
case 3:
toolStripStatusLabel1.Text = "ヘルプを表示しました";
break;
}
}
}
まとめ
MS DOS全盛の時代は、ファンクションキーを使うのが当たり前のようになっていて、Cコンパイラなどの言語アプリケーションでもコンパイルや実行などをファンクションキーで行っていましたが、OSのGUI化に伴い、あまり使われなくなってきているような気がします。ファンクションキーは、メニュー操作などのように階層状に実行したい機能を選んでいくのではなく、直接機能を実行できるので、もっとアプリケーションで活用するといいと思うのですが・・・。
ファンクションキーは、パソコンの操作に不慣れな人でも覚えやすい操作であることに加え、GcClassicFunctionKeyコントロールは、外観上もデザイン性に優れ、複数のキーセットを切り替えて使用できるメリットがあります。ユーザーにやさしいアプリケーションの設計を考えているのであれば、一度導入を検討してみてはいかがでしょうか。



