我用到的程序里面有一个自定义的textbox。
为了在按下enter的时候实现焦点转移,在这个textbox的keydown event
里面有判断如果是按下的是enter执行ProcessDialogKey(Keys.Tab)的片断。
问题就在这个语句,使用这个textbox的时候,他的event发生顺序被改变了。
keydown成了在leave,validating,validated甚至lostfocus之后执行的部分。
如果把上面的ProcessDialogKey部分改成SendKeys.Send("{Tab}"),上面的
event执行顺序就会恢复成正常顺序。
谁知道为什么会产生这样的情况,
ProcessDialogKey(Keys.Tab)和SendKeys.Send("{Tab}")到底有什么区别?

解决方案 »

  1.   

    to ProcessDialogKey(Keys.Tab)和SendKeys.Send("{Tab}")到底有什么区别?SendKeys.Send直接在control内部处理消息,不再向外转发;
    而ProcessDialogKey则不一定,会转发到control的parent。
      

  2.   

    因此再做enter=>tab的时候,用SendKeys.Send比较合理。
      

  3.   

    实际上,原来写这个代码的人是故意用的ProcessDialogKey,因为SendKeys有些问题,现在他又记不起来当时是为什么了。在实际的动作上,会产生不同么?为什么?
      

  4.   

    ProcessDialogKey是用来处理该控件接受到DailogKey时要处理的逻辑,这个里面实质是交到container处理的。而SendKey实质就是模拟发送Key键消息,在到达ProcessDialogKey之前,系统还有很多其他动作,Cache了很多变量的。
      

  5.   

    除了我上面说的,会对event处理循序产生影响之外,具体还会有什么影响?能举个例子么?