2008-10-20 85 views
3

我已经在C#中编写了一个IE工具栏,并且所有的工作都很好,除了当我从我的工具栏打开一个子窗口窗体时,Tab键在子窗体上不起作用,从一个领域到另一个领域。Internet Explorer Toolbar Tab键

有趣的部分是,当我使用form.showDialog()而不是form.show()打开我的子窗体时,这些标签像普通一样工作。

我创建工具栏是基于这个articlearticle

在几篇文章中提到,但仍没有运气,我实现TranslateAcceleratorIO。

这里是我的TranslateAcceleratorIO()和HasFocusIO()的implmentations(在我的工具条类实现)

 [DllImport("user32.dll")] 
     public static extern int TranslateMessage(ref MSG lpMsg); 

     [DllImport("user32", EntryPoint = "DispatchMessage")] 
     static extern bool DispatchMessage(ref MSG msg); 

     public int HasFocusIO() 
     {        
      return this.ContainsFocus ? 0 : 1; //S_OK : S_FALSE; 
     } 

     public int TranslateAcceleratorIO(ref MSG msg) 
     {     
      if (msg.message == 0x100)//WM_KEYDOWN 
       if (msg.wParam == (uint)Keys.Tab || msg.wParam ==(uint)Keys.F6) 
       { 
        if (SelectNextControl(
          ActiveControl, 
          ModifierKeys == Keys.Shift ? false : true, 
          true, 
          true, 
          false) 
         ) 
        { 
         return 0;//S_OK 
        } 
       } 
       else 
       {       
        TranslateMessage(ref msg); 
        DispatchMessage(ref msg); 
        return 0;//S_OK 
       } 
      return 1;//S_FALSE 
     } 

我也试过有没有运气TranslateAccelerator这样的:

public int TranslateAcceleratorIO(ref MSG msg) 
    { 

     TranslateMessage(ref msg); 
     DispatchMessage(ref msg); 
     return 0;//S_OK 
    } 

有其他人遇到这个问题吗?

+0

你有没有得到这个修复? – wpfwannabe 2011-10-03 08:42:39

+0

@wpfwannabe不幸的是,我不记得我们是否解决了这个特殊问题,而且这是我以前的雇主,所以我不能看代码。 – Millhouse 2011-10-17 17:57:25

回答

1

你还在实现HasFocusIO吗?我相信你的主工具栏类也必须实现HasFocusIO并返回true。

IE工具栏的这些类型的问题是我存在一段时间的祸根。我认为我最终做的是创建单独的UI线程,并在这些线程中创建对话模式,从而消除了一些奇怪的问题。但我认为实现HasFocusIO和TranslateAcceleratorIO应该适用于这个特定的应用程序。

0

你在哪里执行这些?很难说你在那里有什么,你是在你的表格中实施它们,还是在你的桌面班上实施它们?

您需要在DeskBand实现中实现它们,并且HasFocusIO需要在您的某个窗口具有焦点(而不仅仅是当工具栏具有焦点时)时返回true。然后,选项卡,删除,箭头键等消息应发送到TranslateAcceleratorIO,也在桌面上,然后您必须将它们传递给您的表单。

IE插件框架非常不可靠。