デザイン画面では、ショートカットキーの設定専用の「ショートカットキーの編集」エディタを使用して、ショートカットキーの追加、削除、編集作業を行うことができます。
「ショートカットキーの編集」エディタ |
「ショートカットキーの編集」エディタは以下の方法で起動できます。
- プロパティウィンドウからの起動
フォームにショートカットコンポーネントが配置されると、ショートカットキーの割り当てが可能なコントロールのプロパティウィンドウに 「gcShortcut1 の Shortcuts」("gcShortcut1"の名称は、フォームに設定されているショートカットコンポーネントオブジェクトの名称によって異なります)というプロパティが自動的に追加されます。
このプロパティをアクティブにした時に表示される「…」ボタンを押下すると、ショートカットキーの設定を行うエディタが起動します。
- スマートタグからの起動
スマートタグのメニューから「ショートカットキーの編集...」を選択します。
 |
スマートタグからの起動は、ショートカットキーの設定対象がInputManに含まれるコントロールである場合に限ります。 |
ショートカットキーの追加
- 「ショートカットキー:」ペインでショートカットキーとなるキーを指定します。 「キーボードからの入力」をチェックしてキーボードから入力するか、 「リストから選択」をチェックして選択します。
- 「動作:」ペインで動作を選択します。
- ダイアログ中央にある〈追加〉ボタンをクリックします。 「現在設定されているショートカットキー:」ペインにショートカットが追加されます。
- 現在の設定をフォーム上の同一クラスの他のコントロールにも適用するには、「同種のコントロールにも適用」をチェックします。 (注意:この時点でフォーム上に配置している同種のコントロールに設定が適用されます。あとでフォーム上に追加されたコントロールには設定は反映されません。)
- 〈OK〉ボタンをクリックします。
ショートカットキーの編集
- 「現在設定されているショートカットキー:」ペインからショートカットキーを選択します。
- 「ショートカットキー:」ペインおよび「動作:」ペインで設定を調整します。 設定を変更するとダイアログ中央にある〈追加〉ボタンが〈編集〉に変わります。
- ダイアログ中央にある〈編集〉ボタンをクリックします。
- 〈OK〉ボタンをクリックします。
ショートカットキーの削除
- 「現在設定されているショートカットキー:」ペインからショートカットキーを選択します。
- ダイアログ中央にある〈削除〉ボタンをクリックします。
- 〈OK〉ボタンをクリックします。
コードでショートカットキーを設定するには、以下の手順を実行します。この手順はショートカットキーの設定対象がInputManに含まれるコントロール以外の場合でも適用できます。
- ShortcutCollection オブジェクトを作成します。
- ShortcutCollection オブジェクトにショートカットキーと、実行される動作を設定します。
- GcShortcut クラスのSetShortcuts メソッドを実行してショートカットを登録します。
以下のサンプルコードでは標準TextBox クラスのオブジェクトにおいて、ショートカットキー[Ctrl]+[E]にClear メソッドを設定します。コントロールにフォーカスがあるときに[Ctrl]+[E]キーを押すと、TextBox コントロールのテキストが消去されます。
Imports GrapeCity.Win.Editors
Public Class Form1
Public Sub New
' フォームに設定されたGcShortcut1とTextBox1が初期化されます。
' この呼び出しは、Windows フォーム デザイナで必要です。
InitializeComponent()
' InitializeComponent() 呼び出しの後で初期化を追加します。
End Sub
Private Sub Form1_Load( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' ShortcutCollectionオブジェクトを作成します。
Dim sc As New ShortcutCollection()
' Ctrl+EキーとTextBox.Clarメソッドを関連付けます。
sc.Add( Keys.E Or Keys.Control, New MethodInvoker( AddressOf TextBox1.Clear ) )
' ショートカットキーの設定をGcShortcutに設定します。
GcShortcut1.SetShortcuts( TextBox1, sc )
End Sub
End Class
using GrapeCity.Win.Editors;
public partial Class Form1 : Form
{
public Form1()
{
// フォームに設定されたgcShortcut1とtextBox1が初期化されます。
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// ShortcutCollectionオブジェクトを作成します。
ShortcutCollection sc = new ShortcutCollection();
// Ctrl+EキーとTextBox.Clearメソッドを関連付けます。
sc.Add( Keys.E | Keys.Control, new MethodInvoker( textBox1.Clear ) );
// ショートカットキーの設定をgcShortcut1に設定します。
gcShortcut1.SetShortcuts( textBox1, sc );
}
}
上記のようにShortcutCollection オブジェクトを作成し、SetShortcuts メソッドで設定する方法の他に、GetShortcuts メソッドを利用してShortcutCollection オブジェクトを取得し、Add メソッドでショートカット機能を追加する方法もあります。 以下のサンプルコードは、いずれもGcTextBox1に対して[Enter]キーで次コントロールに、[Shift]+[Enter]で前コントロールにフォーカスを移動するショートカット機能を設定します。
SetShortcuts メソッドを利用した方法
Imports GrapeCity.Win.Editors
Private Sub Form1_Load( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Enterキーで次コントロールに、Shift+Enterキーで前コントロールにフォーカスを移動します。
GcShortcut1.SetShortcuts(GcTextBox1, New ShortcutCollection(New Keys() {Keys.Enter, Keys.Enter Or Keys.Shift} _
, New Object() {GcShortcut1, GcShortcut1} _
, New String() {"NextControl", "PreviousControl"}))
End Sub
using GrapeCity.Win.Editors;
private void Form1_Load( object sender, EventArgs e )
{
// Enterキーで次コントロールに、Shift+Enterキーで前コントロールにフォーカスを移動します。
gcShortcut1.SetShortcuts(gcTextBox1, new ShortcutCollection(new Keys[] { Keys.Enter, Keys.Enter | Keys.Shift }
, new object[] { gcShortcut1, gcShortcut1 }
, new string[] { "NextControl", "PreviousControl" }));
}
GetShortcuts メソッド/Add メソッドを利用した方法
Imports GrapeCity.Win.Editors
Private Sub Form1_Load( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Enterキーで次コントロールにフォーカスを移動します。
GcShortcut1.GetShortcuts(GcTextBox1).Add(Keys.Enter _
, GcShortcut1 _
, "NextControl")
' Shift+Enterキーで前コントロールにフォーカスを移動します。
GcShortcut1.GetShortcuts(GcTextBox1).Add(Keys.Enter Or Keys.Shift _
, GcShortcut1 _
, "PreviousControl")
End Sub
using GrapeCity.Win.Editors;
private void Form1_Load( object sender, EventArgs e )
{
// Enterキーで次コントロールにフォーカスを移動します。
gcShortcut1.GetShortcuts(gcTextBox1).Add(Keys.Enter
, gcShortcut1
, "NextControl");
// Shift+Enterキーで前コントロールにフォーカスを移動します。
gcShortcut1.GetShortcuts(gcTextBox1).Add(Keys.Enter | Keys.Shift
, gcShortcut1
, "PreviousControl");
}
ShortcutKeys プロパティにショートカットキーを登録すると、アプリケーション全体で使用されるショートカットキーを設定することができます。
ショートカットキーが押されるとShortcutKeyDown イベントが発生します。このイベントをハンドルすることで、ショートカットキーが押されたときに特定の処理を実行することができます。
 |
- ShortcutKeys プロパティで設定されたショートカットキーは、GcShortcut クラスのSetShortcuts メソッドで設定されたショートカットキーより先に処理されます。
- ShortcutKeys.Add メソッドによって登録されたショートカットキーはアプリケーション全体で有効になるため、ShortcutKeyDown イベントはフォームのアクティブ・非アクティブに関わらす発生します。よって、フォームかアクティブかどうかを判断し、処理を実行する必要があります。
|
以下のコードでは、ショートカットキー[Ctrl]+[E]が押されたときにメッセージボックスを表示します。
Public Class Form1
Public Sub New
' フォームが初期化されます。
' この呼び出しは、Windows フォーム デザイナで必要です。
InitializeComponent()
' InitializeComponent() 呼び出しの後で初期化を追加します。
End Sub
Private Sub Form1_Load( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' ショートカットキーを設定します。
GcShortcut1.ShortcutKeys.Add( Keys.E Or Keys.Control )
End Sub
Private Sub GcShortcut1_ShortcutKeyDown( ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles GcShortcut1.ShortcutKeyDown
' フォームがアクティブな状態のときだけダイアログボックスを表示します。
' 注意:
' ShortcutKeys.Addメソッドによって登録されたショートカットキーは
' アプリケーション全体で有効になるため、ShortcutKeyDownイベントは
' フォームのアクティブ・非アクティブに関わらす発生します。
If Me Is Form.ActiveForm
' メッセージボックスを表示します。
MessageBox.Show( "Ctrl + E" )
' イベント処理を終了します。
e.Handled = True
End If
End Sub
End Class
public partial Class Form1 : Form
{
public Form1()
{
// フォームが初期化されます。
InitializeComponent();
}
private void Form1_Load( object sender, EventArgs e )
{
// ショートカットキーを設定します。
gcShortcut1.ShortcutKeys.Add( Keys.E | Keys.Control );
}
private void gcShortcut1_ShortcutKeyDown( object sender, KeyEventArgs e )
{
// フォームがアクティブな状態のときだけダイアログボックスを表示します。
// 注意:
// ShortcutKeys.Addメソッドによって登録されたショートカットキーは
// アプリケーション全体で有効になるため、ShortcutKeyDownイベントは
// フォームのアクティブ・非アクティブに関わらす発生します。
if( this == Form.ActiveForm )
{
// メッセージボックスを表示します。
MessageBox.Show( "Ctrl + E" );
// イベント処理を終了します。
e.Handled = true;
}
}
}