我想添加一些標準的System.Windows.Forms.TreeView控件的元素更多的圖標。TreeView所有者繪製故障時選擇
我的計劃是隻改變treeview控件的標籤區域,但它顯示出一個奇怪的行爲。如果我點擊一個節點來選擇它,當鼠標按鈕被按下時,背景被用高亮顏色正確繪製。但是,在釋放鼠標按鈕之前,文本是錯誤的未選中的顏色。就好像e.State
在鼠標按鈕被按下和釋放之間包含錯誤的狀態。
這是我在做什麼:我初始化爲this.DrawMode = TreeViewDrawMode.OwnerDrawText
,然後註冊我的事件處理程序this.DrawNode += LayoutTreeView_DrawNode
。這裏是處理:
void LayoutTreeView_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
Color color = (e.State & TreeNodeStates.Selected) != 0 ?
SystemColors.HighlightText : SystemColors.WindowText;
TextFormatFlags flags = TextFormatFlags.Left | TextFormatFlags.SingleLine |
TextFormatFlags.VerticalCenter | TextFormatFlags.EndEllipsis;
TextRenderer.DrawText(e.Graphics, e.Node.Text, Font, e.Bounds, color, flags);
}
如果我設置處理其默認情況下...
void LayoutTreeView_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
e.DefaultDraw = true;
}
...同樣的事情發生,這是因爲怪異的窗戶現在實際上是畫它。此行爲在Windows XP中使用.Net 3.5。
有什麼辦法解決這個奇怪的行爲?
僅供參考,包含您正在處理的.Net版本總是有用的。我會試着看看你是否完全理解你所看到的內容。如果我想我會告訴你我在想什麼。 – 2010-03-10 21:07:45
另外,我從來都不喜歡在控件的使用者中繪畫。我總是推動讓它在派生類中完成,這樣,如果在另一個表單或應用程序上需要相同的行爲,則更容易。 – 2010-03-10 21:08:37
我無法使用繪圖默認值重現所描述的行爲,但可以使用自定義代碼。我正在運行Vista x64; VS 2008.Net 3.5。你可以添加你使用的操作系統,Visual Studio和.Net版本嗎? (我聽說有傳言說Vista和Windows 7在操作系統中與TreeViews的工作方式有些不同。) – 2010-03-10 21:13:37