天天看點

Cad.Net開發問題:可停靠面闆無法使用下拉清單

Cad.Net開發問題:可停靠面闆無法使用下拉清單

問題描述

在 AutoCAD.Net 開發過程中,可停靠面闆(PaletteSet)如果包含下拉清單控件(ComboBox),則下拉清單可能無法正常使用。具體表現為:當 PaletteSet的Dock 屬性不為 DockSides.None 時,下拉框會在移動滑鼠時自動收回,無法選中。

解決方案

該問題可以通過設定 PaletteSet.KeepFocus=True 得到解決。但這樣會産生另一個問題:滑鼠從面闆範圍移動到繪圖工作區時,工作區無法自動獲得焦點,需要單擊滑鼠才行。這點實際體驗很不舒服,每次切換都要點一下繪圖區,但當時沒有更好的解決方案,隻能将就。

最終解決方案

後來在翻資料時無意找到解決方案:在ComboBox的下拉事件加入判斷就行,示例代碼如下:

ComboBox _comboBox = new ComboBox();
        private void _comboBox_DropDown(object sender, EventArgs e)
        {
            if (_set.Dock != DockSides.None)
                _set.KeepFocus = true;
        }
        private void _comboBox_DropDownClosed(object sender, EventArgs e)
        {
            if (_set.Dock != DockSides.None)
                _set.KeepFocus = false;
        }
           

其實很簡單,捕捉 ComboBox 下拉事件,在下拉時候保持 PaletteSet 的焦點,下拉收回的時候取消焦點。隻是當時沒想到而已,在這裡記錄下,以飨來者。

原文部分截圖如下:

Cad.Net開發問題:可停靠面闆無法使用下拉清單

參考資料

http://www.doc88.com/p-9925263869083.html

2020.10.20更新:

好吧,還有問題,PaletteSet在停靠狀态時候,使用Win10系統輸入法,快速輸入中文時,大機率引發緻命錯誤。取消停靠,或者輸入英文,或者使用第三方輸入中文,或者慢慢輸入法輸入中文,都不會引發該問題,奇葩!

困擾了很久也沒找到原因,隻能當是未處理的Bug作罷

後來發現設定PaletteSet.KeepFocus 對這個Bug 同樣有效,好吧,就是這樣

繼續閱讀