2011-03-16 73 views
4

我有一個TreeView填充TreeNodes有圖標和複選框。在TreeNode複選框上雙擊beavior

我一直試圖禁用其中一些放棄在BerforeCheck方法中的事件的檢查/取消選中能力。這工作正常,直到我雙擊複選框:複選框的圖像是它的真實狀態的相反(它顯示一個複選標記,如果狀態是Checked=false)。我試圖修復在NodeDoubleClickBeforeClick方法中手動更改StateImageIndex而沒有成功。更糟的是:我在StateImageList(是的,我希望複選框也是三態的)中添加了第三個圖像,但我還沒有使用它(它從未在我的代碼中設置過),第三個圖像是雙擊後設置爲框的當前狀態(此時我無法確定明確的行爲)。

我該怎麼做才能讓它按照最佳方式工作,在最壞的情況下禁用雙擊複選框? 謝謝。

PS:這個問題有already been asked,但一直無人接聽......

+0

我測試了它,基本上,當你雙擊一個複選框檢查變更僅被檢測一次。究竟是什麼問題?你可以發佈一些代碼嗎? – digEmAll 2011-03-16 08:18:34

+0

P.S.我目前使用的是XP,也許這只是一個Vista/7的問題... – digEmAll 2011-03-16 08:30:45

+0

問題是,雙擊後複選框的圖像更改兩次(如兩次點擊),而複選框的狀態僅更改一旦=>不連貫的行爲。除了沒有太多的代碼顯示,它基本上是組件的默認行爲...... BTW我正在使用Vista。 – gregseth 2011-03-16 08:39:29

回答

4

試試這個.. :)工作對我來說

public class NewTreeView : TreeView 
    { 
     protected override void WndProc(ref Message m) 
     { 
      if (m.Msg == 0x203) 
       m.Result = IntPtr.Zero; 
      else 
       base.WndProc(ref m); 
     } 
    } 
+1

好戲法!太不好的必須這樣做來修復這樣一個錯誤... – gregseth 2011-04-11 15:15:59