1
我用我的控制OwnerDrawAll
屬性:如何覆蓋Control.Invalidate()方法?
this.customTreeView.DrawMode =System.Windows.Forms.TreeViewDrawMode.OwnerDrawAll;
this.customTreeView.DrawNode +=
new System.Windows.Forms.DrawTreeNodeEventHandler(customTreeView_DrawNode);
private void customTreeView_DrawNode(object sender, DrawTreeNodeEventArgs e) {
if(!myComboBoxChanged) { // Draw the whole control(tree and info)
drawNode(e);
drawInfo(e);
} else { // Draw only info
drawInfo(e);
}
}
然後我用文字更改事件:
private void cBox_TextChanged(object sender, EventArgs e)
{
text = cBox.Text; // I need this in drawInfo()
myComboBoxChanged = true;
this.customTreeView.Invalidate(); // It doesn't do what I want
myComboBoxChanged = false;
}
這裏Invalidate()
方法重繪整個樹,我怎麼能解決這個問題所以才drawInfo()
將被調用?
你正在設法優化的錯誤。將窗口拖出屏幕,然後再次看到您的DrawNode事件無法正確繪製。 –
@Hans Passant,有沒有什麼辦法可以正確地做,我的意思是隻畫出我的部分控件? –
我不應該使用'.Invalidate'方法。我嘗試使用'.Refresh'方法重繪信息部分,但其他部分('drawNode()')變成白色,並且此部分中的所有內容都消失了,請幫助我 –