none
TreeNode Checkd RRS feed

  • 問題

  • 做了一個功能當勾選或取消節點時 , 跟此節點相同父節點的 節點會一起勾選或取消

    下列方法寫在兩個地方NodeMouseClick與AfterCheck , 兩個地方在doubleclick的時候都會有異常

    當我連點的時候會造成checked異常

     if (e.Node.Parent != null)
    {
          foreach (TreeNode tn in e.Node.Parent.Nodes)
          {
                 tn.Checked = e.Node.Checked;
                 onsole.WriteLine(tn.Name + " - " + e.Node.Checked);
          }
    }

    初始狀態


    ---------------------------------

    動作1.連點58_7 , 這時狀況很異常


    動作1後狀況 滑鼠移動到旁邊button不會導致按鈕變色 , 並且點擊按鈕會無效 ,當滑鼠點擊一次後才可以點擊按鈕與滑鼠移動到按鈕上才會變色

    ---------------------------------

    動作2-1 滑鼠點擊非節點 , 畫面如動作2圖片, 此時取得節點的checked 兩個卻都是True

    動作2-2 滑鼠點擊58_7  , 畫面如動作2圖片, 此時 58_7 Checked = false ; 58_8 Checked = true

    動作2-3 滑鼠點擊58_8 , 畫面如初始狀態圖片 ,但是此時 58_7 Checked = true; 58_8 Checked = false

    Q1.想請問有沒有方式避開這種情況?

    Q2.想請問這倒底是甚麼狀況?

    貌似就是當連點58_7後 , 要再點擊一次58_7才會畫面與值同步(如動作2-2後的情況),而如果點擊的是其他節點即便會變更58_7的值貌似58_7也會鎖住(如動作2-3後的情況)

    • 已編輯 StuBoo 2018年8月15日 上午 01:15
    2018年8月14日 上午 10:11

所有回覆

  • 改成這樣試看看(處理AfterSelect事件, 不處理AfterCheck事件):

    private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
    {
        bool CheckedStatus= e.Node.Checked? false:true;
        if (e.Node.Parent != null)
        {
            foreach (TreeNode tn in e.Node.Parent.Nodes)
            {
                tn.Checked = CheckedStatus;                    
            }
        }
    }

    2018年8月15日 上午 05:25
  • 改成這樣試看看(處理AfterSelect事件, 不處理AfterCheck事件):

    private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
    {
        bool CheckedStatus= e.Node.Checked? false:true;
        if (e.Node.Parent != null)
        {
            foreach (TreeNode tn in e.Node.Parent.Nodes)
            {
                tn.Checked = CheckedStatus;                    
            }
        }
    }

    有效

    但是沒辦法阻止使用者只點選checkbox , 也還有些問題 點擊同一個TreeNode並不會觸發事件 所以沒辦法取消


    • 已編輯 StuBoo 2018年8月17日 上午 11:20
    2018年8月17日 上午 11:19