本帖最后由 shark_lau 于 2014-10-09 15:06:30 编辑

解决方案 »

  1.   


    试过了,貌似与那个cancelEdit无关,是鼠标点击treeview就会触发2次AfterLabelEdit。您能解释具体做法吗?
      

  2.   

    e.Node.BeginEdit();每次都会导致开始编辑,当离开时又会循环触发这个事件
      

  3.   

    if (e.Button == MouseButtons.Left)  return;
    这是闹哪样,注册了事件,里面什么代码都不写,直接return了
      

  4.   


    可是新建node,开始编辑node的文本,之后用键盘回车,就会提示一次,按确定后,node的文本依然可以编辑。就是鼠标会有问题
      

  5.   

    如果你在MouseDown事件里没有再去操作treeview的话,确实是没有任何影响
    事件响应了就响应了呗,你不是因为希望它响应才注册的这个事件吗
    MouseDown事件响应,跟AfterLabelEdit有什么关系
      

  6.   

    当改变窗口大小时,AfterLabelEdit事件会触发3次
    你是如何改变窗口大小的?
    用鼠标拽,必然点击鼠标的时候会使treeview失去焦点,那么当然会触发AfterLabelEdit
      

  7.   


    如果正在编辑node文本,点击treeview,看调用顺序是:先触发AfterLabelEdit事件,再触发MouseDown事件,然后再触发一次AfterLabelEdit事件。用键盘回车就不会触发第二次的AfterLabelEdit事件。
      

  8.   


    如果正在编辑node文本,点击treeview,看调用顺序是:先触发AfterLabelEdit事件,再触发MouseDown事件,然后再触发一次AfterLabelEdit事件。用键盘回车就不会触发第二次的AfterLabelEdit事件。
    你把MouseDown里的代码都去掉,也这样吗?
      

  9.   


    如果正在编辑node文本,点击treeview,看调用顺序是:先触发AfterLabelEdit事件,再触发MouseDown事件,然后再触发一次AfterLabelEdit事件。用键盘回车就不会触发第二次的AfterLabelEdit事件。
    你把MouseDown里的代码都去掉,也这样吗?是,MouseDown事件开头的return就是相当于注释掉后续代码。我又多次试验,是AfterLabelEdit事件里的e.Node.BeginEdit()引发的第二次AfterLabelEdit事件。可是没有这句,又没办法让node文本保持编辑状态。
      

  10.   

    你试过去掉MessageBox.Show这个东东吗
    有它在,很多时候会出现问题的
    因为它会使窗体失去焦点
      

  11.   


    试过了,与messagebox无关,是是AfterLabelEdit事件里的e.Node.BeginEdit()引发的第二次AfterLabelEdit事件,可是不能去掉这句,因为需要保持node文本的编辑状态