難怪快捷鍵都設定成ctrl+blablabla
但是我就是為了方便程式運作不用用滑鼠按按鈕,所以快捷鍵只想按鍵盤上的一個鍵,因此在textbox輸入時要阻止form的快捷鍵運作。
大致的做法是在textbox獲得關注@@?的時候解除form的快捷鍵,當text又取得關注的時候再將form的快捷鍵恢復。
but有個小問題是,要讓textbox的輸入狀態取消,就只能選取其他control,例如點其他textBox或是button,如此難免產生期望外的行為。
而textBox.Focused是唯讀事件,將Focus轉移到Form上也無法解除textbox的Focused。最後發現只能用
targetForm.ActiveControl = null;
從parent form去取消active control
class GeneralCallbakSetter
{
Form targetForm;
public GeneralCallbakSetter(Form inForm)
{
targetForm = inForm;
}
public void SetCallbacks(Control textBox)
{
targetForm = textBox.FindForm();
textBox.Enter += Enter;
textBox.Leave += Leave;
textBox.KeyUp += KeyUp;
}
void Leave(object sender, EventArgs e)
{
targetForm.KeyPreview = true;
}
void Enter(object sender, EventArgs e)
{
targetForm.KeyPreview = false;
}
void KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
{
TextBox tb = (TextBox)sender;
targetForm.ActiveControl = null;
}
}
}
沒有留言:
張貼留言