台灣最大程式設計社群網站
線上人數
1391
 
會員總數:246690
討論主題:190103
歡迎您免費加入會員
討論區列表 >> C# >> WinForm 做KeyEvent連續按鍵組合!?(討論向)
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
WinForm 做KeyEvent連續按鍵組合!?(討論向)
價值 : 20 QP  點閱數:617 回應數:2
樓主

wilson
門外漢
0 1
66 3
發送站內信

我希望做到 Form截取多個Keys組成字串
類似 我們在看windows Folder 太多檔案的話
不用一起按 大概間隔0.5s key入 A+ S +D

asd開頭的檔案 就會被selected
可見windows Folder 有抓到 "ASD"
而且 又不強制 一起KEY 一樣的法想不太到
目前只有替代方案...

第一個方法
是 KeyEventArgs 找出 e.keysCode == keys.A && e.keysCode == keys.S
但必須 同時觸發KeyEvent

如果輸入 A+S+D 就變成其中一個吃不到 而且所有按扭又要同時按壓 很煩


第二的方法
是網路找的 但是以下方法是從win基底 取keyboard
所以固定都是按照編碼順序 取得值
意思就是假設 A + S + D 鍵入 順序就會亂 變成ADS 只能達到我的需求的一半

===================
[DllImport("user32.dll")]
static extern short GetAsyncKeyState(Keys vKey);

public Form1()
{
InitializeComponent();
this.KeyDown += new KeyEventHandler(this.ShowKeyState);
this.KeyPreview = true;
}

private void ShowKeyState(object sender, KeyEventArgs e)
{
  string result = "";

  foreach (Keys k in Enum.GetValues(typeof(Keys)))
  {
    if (GetAsyncKeyState(k) != 0) result += k.ToString();
  }
 this.label1.Text = result;
}
==================

第三個方法
是智障方法
刻一個隱藏的 textBox 紀錄Form KeyEventArgs 所有值

在加個 timer 超過3秒沒輸入 自動清空
但是 這樣是考慮 這個Form 沒有其他 KeyEventArg會衝突


finally
各位 有沒有類似的經驗 或是 更好的方法 可以代替????

懇請賜教 m_ _m





搜尋相關Tags的文章: [ C# ] , [ Keys ] , [ KeyEventArgs ] , [ 相連鍵 ] ,
本篇文章發表於2017-07-20 23:34
1樓
回應

小魚
檢舉此回應
我想到的是可以用一個string之類的變數,
在KeyEventArg觸發的時候改變string變數值,
也可以另外用一個DateTime的變數,
KeyEventArg觸發的時候判斷DateTime是否過期,
如果過期就將string清空再加入值。
本篇文章回覆於2017-07-20 23:44
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

wilson
檢舉此回應
恩 感謝 不過1F 其實就類似方法三了

不過我還是想找找有沒有第二種方法

符合需求
本篇文章回覆於2017-07-21 09:46
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.