两个事件我都写了处理函数,怎么能实现在BeforeSelect中判断一个条件,满足该条件的时候才调用AfterSelect,否则不调用AfterSelect?

解决方案 »

  1.   

    写一个窗体级的变量,在BeforeSelect事件中对这个变量赋值,然后在AfterSelect事件中根据这个变量的值进行相应的处理。
      

  2.   

    你可以在BeforeSelect事件里通过参数e.Cancel设置True来取消复选,这样就不会发生AfterSelect事件了.
      

  3.   

    定义一个 类级的 变量.
    在BeforeSelect事件中对这个变量赋值,
    然后在AfterSelect事件中根据这个变量的值进行相应的处理。
      

  4.   

    另一个可行的方法是你在BeforeSelect事件里用-=AfterSelect事件注销把,处理好后再+=注册上就可以了.参考如下的代码:void treeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e)
    {
    //注销事件
    this.treeView1.AfterSelect -= new TreeViewEventHandler(treeView1_AfterSelect);
    //注册事件
    this.treeView1.AfterSelect += new TreeViewEventHandler(treeView1_AfterSelect);
    }
      

  5.   

    bool ExecAfterEvent = true; //为true执行after事件里的代码,false则不执行。void treeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e)
    {
    if(不想执行afterSelect事件){ExecAfterEvent = false;}
    }
    void treeView1_AfterSelect(object sender, TreeViewCancelEventArgs e)
    {
             if(ExecAfterEvent == false){//do nothing}
    }
      

  6.   

    在朋友们的帮忙提示下,treeview控件点击空白处取消选中项完美解决方案出来了。以下是实现代码,欢迎提供已经完善。
            bool CancelfterEvent = false;
            private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
            {
                //设置显示
                this.label1.Text = this.treeView1.SelectedNode.Text;
            }        private void treeView1_MouseDown(object sender, MouseEventArgs e)
            {
                if (treeView1.GetNodeAt(e.Location) == null)
                {
                    CancelfterEvent = true;
                    //清除显示
                    this.label1.Text = "";
                }
                else
                    CancelfterEvent = false;
                this.treeView1.SelectedNode = treeView1.GetNodeAt(e.Location);
            }        private void treeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e)
            {
                e.Cancel = CancelfterEvent;
            }