我用C#编写了IE工具栏,除了当我从我的工具栏打开一个子窗体时,标签键无法在子窗体上正常工作以允许我从一个字段移动到另一个字段之外,一切都很好。
有趣的是,当我使用form.showDialog()而不是form.show()来打开我的子窗体时,标签可以像平常一样工作。
我创建的工具栏基于这篇文章article和这篇文章article 我已经按照几篇文章中提到的实现了TranslateAcceleratorIO,但仍然没有成功。
这里是我的TranslateAcceleratorIO()和HasFocusIO()的实现(在我的工具栏类中实现)。
有趣的是,当我使用form.showDialog()而不是form.show()来打开我的子窗体时,标签可以像平常一样工作。
我创建的工具栏基于这篇文章article和这篇文章article 我已经按照几篇文章中提到的实现了TranslateAcceleratorIO,但仍然没有成功。
这里是我的TranslateAcceleratorIO()和HasFocusIO()的实现(在我的工具栏类中实现)。
[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
}
有其他人遇到过这个问题吗?