我使用的是 Microsoft Visual Studio Community 2017 版本 15.7.2 和 .NET Framework 版本 4.7.03056。我正在使用 WinformsTreeView并正在修改其默認(rèn)行為,使其更像 Windows 資源管理器樹視圖。我設(shè)置了以下屬性:LineHeight` 22DrawMode OwnerDrawAll我正在為DrawNode事件使用以下內(nèi)容。此代碼使用右括號(hào)和下括號(hào)位圖(16x16)來顯示展開或未展開的節(jié)點(diǎn),并使用自定義顏色來突出顯示選擇/焦點(diǎn)。沒什么異國情調(diào)。private void treeDir_DrawNode(object sender, DrawTreeNodeEventArgs e){ const int indent = 12; const int markerSpacing = 20; int leftPos = e.Bounds.Left + e.Node.Level * indent; Brush selectBrush; Pen pen; Graphics g = e.Graphics; e.DrawDefault = false; if (e.Node.IsSelected) { if (e.Node.TreeView.Focused) { selectBrush = new SolidBrush(FocusedBackgroundColor); pen = new Pen(new SolidBrush(FocusedPenColor)); } else { selectBrush = new SolidBrush(UnfocusedBackgroundColor); pen = new Pen(new SolidBrush(UnfocusedPenColor)); } g.FillRectangle(selectBrush, e.Bounds); g.DrawRectangle(pen, e.Bounds); } if (e.Node.Nodes.Count > 0) { if (e.Node.IsExpanded) { g.DrawImage(Properties.Resources.Expanded, leftPos+2, e.Bounds.Top+2); } else { g.DrawImage(Properties.Resources.Unexpanded, leftPos+2, e.Bounds.Top+2); } } g.DrawString( e.Node.Text, CommonFont, new SolidBrush(Color.Black), leftPos + markerSpacing, e.Bounds.Top+2);}發(fā)生的事情是,當(dāng)表單第一次顯示時(shí),如果我展開一個(gè)不是第一個(gè)節(jié)點(diǎn)的節(jié)點(diǎn),它也會(huì)覆蓋(透明地覆蓋)第一個(gè)節(jié)點(diǎn)文本。這是順序。表格啟動(dòng)時(shí):然后我雙擊節(jié)點(diǎn) 4:如果我雙擊第一個(gè)節(jié)點(diǎn),問題就解決了:從現(xiàn)在開始,如果我雙擊節(jié)點(diǎn) 4,問題將不再出現(xiàn)。雙擊第一個(gè)節(jié)點(diǎn)可解決問題,并在節(jié)點(diǎn) 4 之后的表單生命周期內(nèi)避免該問題。但是,如果我進(jìn)一步向下雙擊另一個(gè)可擴(kuò)展節(jié)點(diǎn),它會(huì)再次發(fā)生。這是一個(gè)錯(cuò)誤TreeView還是我在我的所有者抽獎(jiǎng)中做錯(cuò)了什么?
- 1 回答
- 0 關(guān)注
- 206 瀏覽
添加回答
舉報(bào)
0/150
提交
取消