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 的焦點,下拉收回的時候取消焦點。隻是當時沒想到而已,在這裡記錄下,以飨來者。
原文部分截圖如下:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0DOyI2bGJzYo50MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL2UzM1ETO0cTM5ETMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
參考資料
http://www.doc88.com/p-9925263869083.html
2020.10.20更新:
好吧,還有問題,PaletteSet在停靠狀态時候,使用Win10系統輸入法,快速輸入中文時,大機率引發緻命錯誤。取消停靠,或者輸入英文,或者使用第三方輸入中文,或者慢慢輸入法輸入中文,都不會引發該問題,奇葩!
困擾了很久也沒找到原因,隻能當是未處理的Bug作罷
後來發現設定PaletteSet.KeepFocus 對這個Bug 同樣有效,好吧,就是這樣