From 52869053d98a53b83567aab7d0e820d9301e8e1a Mon Sep 17 00:00:00 2001 From: yupeng_dyp Date: Wed, 27 Nov 2024 10:32:07 +0000 Subject: [PATCH] =?UTF-8?q?update=20src/CADShared/ExtensionMethod/SingleKe?= =?UTF-8?q?yWordHook.cs.=20=E4=BC=98=E5=8C=96=E5=90=AF=E7=94=A8=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E8=BE=93=E5=85=A5=E6=97=B6=E8=BE=93=E5=85=A5=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E7=84=A6=E7=82=B9=E7=A7=BB=E5=88=B0=E5=8A=A8=E6=80=81?= =?UTF-8?q?=E8=BE=93=E5=85=A5=E6=A1=86=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: yupeng_dyp --- .../ExtensionMethod/SingleKeyWordHook.cs | 73 +++++++++---------- 1 file changed, 35 insertions(+), 38 deletions(-) diff --git a/src/CADShared/ExtensionMethod/SingleKeyWordHook.cs b/src/CADShared/ExtensionMethod/SingleKeyWordHook.cs index e774feb..0f1f84c 100644 --- a/src/CADShared/ExtensionMethod/SingleKeyWordHook.cs +++ b/src/CADShared/ExtensionMethod/SingleKeyWordHook.cs @@ -1,4 +1,4 @@ -using Keys = System.Windows.Forms.Keys; +using Keys = System.Windows.Forms.Keys; namespace IFoxCAD.Cad; @@ -84,11 +84,9 @@ public void AddKeys(KeywordCollection keywordCollection) { foreach (Keyword item in keywordCollection) { - if (item.LocalName.Length == 1) - { - var k = (Keys)item.LocalName[0]; - _keyWords.Add(k); - } + if (item.LocalName.Length != 1) continue; + var k = (Keys)item.LocalName[0]; + _keyWords.Add(k); } } @@ -108,6 +106,7 @@ public void AddKeys(KeywordCollection keywordCollection) /// public void Reset() { + _key = Keys.None; _isResponsed = false; } @@ -136,34 +135,32 @@ private void Acap_PreTranslateMessage(object sender, PreTranslateMessageEventArg if (!_working || e.Message.message != 256) return; var tempKey = IntPtr.Size == 4 ? (Keys)e.Message.wParam.ToInt32() : (Keys)e.Message.wParam.ToInt64(); var contains = _keyWords.Contains(tempKey); - if (contains) + if (!contains) return; + + // 标记为true,表示此按键已经被处理,Windows不会再进行处理 + if (_workType != SingleKeyWordWorkType.ENTER) + { + e.Handled = true; + } + + if (IsResponsed) return; //放 e.Handled 后是避免在非 ENTER 模式时长按造成动态输入框偶发性闪现关键字以至轻微卡顿问题 + + _key = tempKey; + _isResponsed = true; // 此bool是防止按键被长按时出错 + + switch (_workType) { - // 标记为true,表示此按键已经被处理,Windows不会再进行处理 - if (_workType != SingleKeyWordWorkType.ENTER) - { - e.Handled = true; - } - - if (contains) - _key = tempKey; - if (!_isResponsed) - { - // 此bool是防止按键被长按时出错 - _isResponsed = true; - switch (_workType) - { - case SingleKeyWordWorkType.ESCAPE: - // ESC稳妥一些,但是要判断promptResult的顺序 - KeyBoardSendKey(Keys.Escape); - break; - case SingleKeyWordWorkType.ENTER: - KeyBoardSendKey(Keys.Enter); - break; - case SingleKeyWordWorkType.WRITE_LINE: - Utils.WriteToCommandLine(Convert.ToChar(_key) + _enterStr); - break; - } - } + case SingleKeyWordWorkType.ESCAPE: + // ESC稳妥一些,但是要判断promptResult的顺序 + KeyBoardSendKey(Keys.Escape); + break; + case SingleKeyWordWorkType.ENTER: + KeyBoardSendKey(Keys.Enter); + break; + case SingleKeyWordWorkType.WRITE_LINE: + Utils.SetFocusToDwgView(); // 恢复焦点(如果前面关键字输入错误便会将焦点移至动态输入框) + Utils.WriteToCommandLine(Convert.ToChar(_key) + _enterStr); + break; } } @@ -177,7 +174,7 @@ private void Acap_PreTranslateMessage(object sender, PreTranslateMessageEventArg public bool IsDisposed { get; private set; } /// - /// + /// 拆除事件 /// /// private void Dispose(bool disposing) @@ -195,19 +192,19 @@ private void Dispose(bool disposing) } /// - /// 析够里把事件拆了 + /// 析构里把事件拆了 /// ~SingleKeyWordHook() { - Dispose(disposing: false); + Dispose(false); } /// - /// + /// 拆除事件并清空关键字 /// public void Dispose() { - Dispose(disposing: true); + Dispose(true); GC.SuppressFinalize(this); } -- Gitee