C#WinFormショートカット設定テクニック
9782 ワード
1、Alt+*(ボタンショートカット)
ボタンショートカットも最も一般的なショートカットキーであり、その設定も簡単である.button、label、menuStripなどの他のコントロールのText属性に名前を指定する場合は、その後ろに「&」を付けて指定アルファベットを1つ追加すればよい.例えば、(&D)、(Alt+D)呼び出しを決定します.
複数の文字を指定すると、最初はショートカットキーになります.例えば、確定(&OK)、(Alt+O)呼び出し;ファイル(&Fill),(Alt+F)呼び出し.
2、Ctrl+*およびその他の組み合わせキー
FormのKeyPreview属性をTrueにする
Modifiersを使用して結合キーを設定し、キーボードの数字領域キーのKeysはDで始まり、キーボードの数字はNumPadで始まります.CtrlとShiftの結合キーを押す方法と同様に、CtrlとAltの列挙をint型加算に変換してModifiersと比較することで、その結合キーが押されたか否かを判断することができる.
また、フォームのAcceptButtonプロパティに関連付けられたボタンは、キーボード上のEnterキーに対応します.フォームのCancelButtonプロパティに関連付けられたボタンは、キーボードのEcsキーに対応します.}
======================================================
キーコード
BACKSPACE {BACKSPACE}、{BS}または{BKSP}BREAK{BREAK}CAPS LOCK{CAPSLOCK}DELまたはDELETE{DELETE}または{DEL}DOWN ARROW(下矢印キー){DOWN}END{END}ENTER{ENTER}または~ESC{ESC}HELP{HELP}HOME{HOME}INSまたはINSERT{INSERT}または{INS}LEFT ARROW(左矢印キー){LEFT}NUM LOCK{NUMLOCK}PAGE DOWN{PGDN}PAGE UP{PGUP}PRINT SCREEN{PRTSC}(将来使用のために保持)RIGHT ARROW(右矢印キー){RIGHT}SCROLL LOCK{SCROLLLOCK}TAB{TAB}UPARROW(上矢印キー){UP}F 1{F 1}F 2{F 2}F 3}F 4{F 4}F 5{F 5}F 6{F 6}F 7{F 7}F 8{F 8}F 9{F 9}F 10{F 10}F 11{F 11}F 12{F 12}F 13{F 13}F 14{F 14}F 15{F 15}F 16{F 16}テンキープラス記号{ADD}テンキーマイナス記号{SUBTRACT}テンキー乗数{MULTIPLY}テンキーマイナス記号{DIVIDE}
**************************************************************************************************************************************************************************************************************************************
#regionショートカット関連//////////////////////////////////////////////////////
#endregion
#ショートカットキー(システムホットキー)応答の実現
アプリケーションでは、Ctrl+Cレプリケーション、Ctrl+V貼り付けのようなショートカットキーを実装する必要があるかもしれません.本稿では、その実装を簡単に紹介し、実装クラスを示します.
(1)HotKeyという名前のクラスファイルを作成する.cs、コードは以下の通りです.
簡単に説明します.
「public static extern bool RegisterHotKey()」という関数は、ホットキーを登録するために使用されます.この関数はuser 32を参照する必要があるためである.dllダイナミックリンクライブラリは使用できません.
user32.dllは非管理コードであり、ネーミングスペースで直接参照することはできないため、「DllImport」で導入してから使用する必要があります.そして関数の前に
「[DllImport("user 32.dll",SetLastError=true)]行の文.
「public static extern bool UnregisterHotKey()」という関数はホットキーをログアウトするために使用され、同じようにDllImportでuser 32を参照する必要がある.dllは後で使用できます.
「public enum KeyModifiers{}」は、補助キーの数値コードを文字として直接表す列挙のセットを定義し、使いやすいようにします.これにより、呼び出し時に各セカンダリを覚える必要はありません.
名前を直接選択するだけで、ヘルプキーのコードを選択できます.
(2)フォームFormAを例としてHotKeyクラスの使用について説明する
FormAのActivateイベントにホットキーを登録し、この例ではShift+S、Ctrl+Z、Alt+Dの3つのホットキーを登録します.ここのId番号は任意に設定できますが、重複しないようにしてください.
FormAのLeaveイベントでホットキーをオフにします.
FromAのWndProc関数の再ロード
コードが完了したら、フォームでShift+S、Ctrl+B、Alt+Dの3つのショートカットキーのいずれかを押すと、プログラムが応答します.
以上の内容は、編集者が紹介したC#WinFormショートカットキーの設定テクニックです.
ボタンショートカットも最も一般的なショートカットキーであり、その設定も簡単である.button、label、menuStripなどの他のコントロールのText属性に名前を指定する場合は、その後ろに「&」を付けて指定アルファベットを1つ追加すればよい.例えば、(&D)、(Alt+D)呼び出しを決定します.
複数の文字を指定すると、最初はショートカットキーになります.例えば、確定(&OK)、(Alt+O)呼び出し;ファイル(&Fill),(Alt+F)呼び出し.
2、Ctrl+*およびその他の組み合わせキー
FormのKeyPreview属性をTrueにする
Modifiersを使用して結合キーを設定し、キーボードの数字領域キーのKeysはDで始まり、キーボードの数字はNumPadで始まります.CtrlとShiftの結合キーを押す方法と同様に、CtrlとAltの列挙をint型加算に変換してModifiersと比較することで、その結合キーが押されたか否かを判断することができる.
private void frmMain_KeyDown(object sender, KeyEventArgs e)
{
// frmMain, btnOK, btnSave
//
switch (e.KeyCode)
{
case Keys.F1:
btnOK_Click(this, EventArgs.Empty);
break;
case Keys.F2:
btnSave_Click(this, EventArgs.Empty);
break;
}
//
if (e.KeyCode == Keys.F1 && e.Modifiers == Keys.Control) //Ctrl+F1
{
btnShouYi_Click(this, EventArgs.Empty);
}
if ((int)e.Modifiers == ((int)Keys.Control + (int)Keys.Alt) && e.KeyCode == Keys.D0) //Ctrl + Alt + 0
{
MessageBox.Show(" Control + Alt + 0");
}
また、フォームのAcceptButtonプロパティに関連付けられたボタンは、キーボード上のEnterキーに対応します.フォームのCancelButtonプロパティに関連付けられたボタンは、キーボードのEcsキーに対応します.}
======================================================
キーコード
BACKSPACE {BACKSPACE}、{BS}または{BKSP}BREAK{BREAK}CAPS LOCK{CAPSLOCK}DELまたはDELETE{DELETE}または{DEL}DOWN ARROW(下矢印キー){DOWN}END{END}ENTER{ENTER}または~ESC{ESC}HELP{HELP}HOME{HOME}INSまたはINSERT{INSERT}または{INS}LEFT ARROW(左矢印キー){LEFT}NUM LOCK{NUMLOCK}PAGE DOWN{PGDN}PAGE UP{PGUP}PRINT SCREEN{PRTSC}(将来使用のために保持)RIGHT ARROW(右矢印キー){RIGHT}SCROLL LOCK{SCROLLLOCK}TAB{TAB}UPARROW(上矢印キー){UP}F 1{F 1}F 2{F 2}F 3}F 4{F 4}F 5{F 5}F 6{F 6}F 7{F 7}F 8{F 8}F 9{F 9}F 10{F 10}F 11{F 11}F 12{F 12}F 13{F 13}F 14{F 14}F 15{F 15}F 16{F 16}テンキープラス記号{ADD}テンキーマイナス記号{SUBTRACT}テンキー乗数{MULTIPLY}テンキーマイナス記号{DIVIDE}
**************************************************************************************************************************************************************************************************************************************
#regionショートカット関連//////////////////////////////////////////////////////
private void txtHotKey_KeyDown(object sender, KeyEventArgs e)
{
int HotKeyValue = 0;
string HotKeyString = "";
e.SuppressKeyPress = false;
e.Handled = true;
if (e.Modifiers != Keys.None)
{
switch (e.Modifiers)
{
case Keys.Control:
HotKeyString += "Ctrl + ";
HotKeyValue = (int)e.Modifiers;
break;
case Keys.Alt:
HotKeyString += "Alt + ";
HotKeyValue = (int)e.Modifiers;
break;
case Keys.Shift:
HotKeyString += "Shift + ";
HotKeyValue = (int)e.Modifiers;
break;
case Keys.Control | Keys.Alt:
HotKeyString += "Ctrl + Alt + ";
HotKeyValue = (int)e.Modifiers;
break;
case Keys.Control | Keys.Shift:
HotKeyString += "Ctrl + Shift + ";
HotKeyValue = (int)e.Modifiers;
break;
case Keys.Alt | Keys.Shift:
HotKeyString += "Alt + Shift + ";
HotKeyValue = (int)e.Modifiers;
break;
case Keys.Control | Keys.Alt | Keys.Shift:
HotKeyString += "Ctrl + Alt + Shift + ";
HotKeyValue = (int)e.Modifiers;
break;
}
if (e.KeyCode != Keys.None && e.KeyCode != Keys.ControlKey && e.KeyCode != Keys.Menu && e.KeyCode != Keys.ShiftKey)
{
HotKeyString += KeyCodeToString(e.KeyCode);
HotKeyValue += (int)e.KeyCode;
}
}
else
{
if (e.KeyCode == Keys.Delete || e.KeyCode == Keys.Back)
{
HotKeyString = " ";
HotKeyValue = -1;
}
else if (e.KeyCode != Keys.None)
{
HotKeyString = KeyCodeToString(e.KeyCode);
HotKeyValue = (int)e.KeyCode;
}
}
if (HotKeyValue == 0)
HotKeyValue = -1;
TextBox txtHotKey = (TextBox)sender;
txtHotKey.Text = HotKeyString;
txtHotKey.Tag = HotKeyValue;
txtHotKey.SelectionStart = txtHotKey.Text.Length;
}
///
///
///
///
///
private string KeyCodeToString(Keys KeyCode)
{
if (KeyCode >= Keys.D0 && KeyCode <= Keys.D9)
{
return KeyCode.ToString().Remove(0, 1);
}
else if (KeyCode >= Keys.NumPad0 && KeyCode <= Keys.NumPad9)
{
return KeyCode.ToString().Replace("Pad", "");
}
else
{
return KeyCode.ToString();
}
}
///
///
///
private void txtHotKey_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = true;
}
///
/// , ,
///
private void txtHotKey_KeyUp(object sender, KeyEventArgs e)
{
CheckHotkey(sender);
}
///
/// , ,
///
private void txtHotKey_LostFocus(object sender, EventArgs e)
{
CheckHotkey(sender);
}
///
/// ,
///
private void CheckHotkey(object sender)
{
TextBox txtHotKey = (TextBox)sender;
if (txtHotKey.Text.EndsWith(" + ") || String.IsNullOrEmpty(txtHotKey.Text))
{
txtHotKey.Text = " ";
txtHotKey.Tag = -1;
txtHotKey.SelectionStart = txtHotKey.Text.Length;
}
}
#endregion
#ショートカットキー(システムホットキー)応答の実現
アプリケーションでは、Ctrl+Cレプリケーション、Ctrl+V貼り付けのようなショートカットキーを実装する必要があるかもしれません.本稿では、その実装を簡単に紹介し、実装クラスを示します.
(1)HotKeyという名前のクラスファイルを作成する.cs、コードは以下の通りです.
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace KoalaStudio.BookshopManager
{
class HotKey
{
// , 0。
// , 0。 , GetLastError。
[DllImport("user32.dll", SetLastError = true)]
public static extern bool RegisterHotKey(
IntPtr hWnd, //
int id, // ID( ID )
KeyModifiers fsModifiers, // Alt、Ctrl、Shift、Windows
Keys vk //
);
[DllImport("user32.dll", SetLastError = true)]
public static extern bool UnregisterHotKey(
IntPtr hWnd, //
int id // ID
);
// ( , )
[Flags()]
public enum KeyModifiers
{
None = 0,
Alt = 1,
Ctrl = 2,
Shift = 4,
WindowsKey = 8
}
}
}
簡単に説明します.
「public static extern bool RegisterHotKey()」という関数は、ホットキーを登録するために使用されます.この関数はuser 32を参照する必要があるためである.dllダイナミックリンクライブラリは使用できません.
user32.dllは非管理コードであり、ネーミングスペースで直接参照することはできないため、「DllImport」で導入してから使用する必要があります.そして関数の前に
「[DllImport("user 32.dll",SetLastError=true)]行の文.
「public static extern bool UnregisterHotKey()」という関数はホットキーをログアウトするために使用され、同じようにDllImportでuser 32を参照する必要がある.dllは後で使用できます.
「public enum KeyModifiers{}」は、補助キーの数値コードを文字として直接表す列挙のセットを定義し、使いやすいようにします.これにより、呼び出し時に各セカンダリを覚える必要はありません.
名前を直接選択するだけで、ヘルプキーのコードを選択できます.
(2)フォームFormAを例としてHotKeyクラスの使用について説明する
FormAのActivateイベントにホットキーを登録し、この例ではShift+S、Ctrl+Z、Alt+Dの3つのホットキーを登録します.ここのId番号は任意に設定できますが、重複しないようにしてください.
private void Form_Activated(object sender, EventArgs e)
{
// Shift+S,Id 100。HotKey.KeyModifiers.Shift 4 。
HotKey.RegisterHotKey(Handle, 100, HotKey.KeyModifiers.Shift, Keys.S);
// Ctrl+B,Id 101。HotKey.KeyModifiers.Ctrl 2 。
HotKey.RegisterHotKey(Handle, 101, HotKey.KeyModifiers.Ctrl, Keys.B);
// Alt+D,Id 102。HotKey.KeyModifiers.Alt 1 。
HotKey.RegisterHotKey(Handle, 102, HotKey.KeyModifiers.Alt, Keys.D);
}
FormAのLeaveイベントでホットキーをオフにします.
private void FrmSale_Leave(object sender, EventArgs e)
{
// Id 100
HotKey.UnregisterHotKey(Handle, 100);
// Id 101
HotKey.UnregisterHotKey(Handle, 101);// http://ike.126.com
// Id 102
HotKey.UnregisterHotKey(Handle, 102);
}
FromAのWndProc関数の再ロード
///
/// Windows
/// WndProc ,
///
///
protected override void WndProc(ref Message m)
{
const int WM_HOTKEY = 0x0312;
//
switch (m.Msg)
{
case WM_HOTKEY:
switch (m.WParam.ToInt32())
{
case 100: // Shift+S
//
break;
case 101: // Ctrl+B
//
break;
case 102: // Alt+D
//
break;
}
break;
}
base.WndProc(ref m);
}
コードが完了したら、フォームでShift+S、Ctrl+B、Alt+Dの3つのショートカットキーのいずれかを押すと、プログラムが応答します.
以上の内容は、編集者が紹介したC#WinFormショートカットキーの設定テクニックです.