一个MDiContainer 窗体, 一个主窗体(MdiChild)。
mdichild 中有个类似datagrid的自定义控件。里面是一个个Textbox
问题:
    当我按Tab健的时候,在自定义控件的Textbox中走的时候,要新出现一个窗体,并且把光标聚焦在新出现的窗体的第一个控件,继续按Tab健, 遍历完新出现的窗体控件后,自动关闭,光标跳向自定义控件的下一个Textbox..主窗体  代码protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
Keys keyCode = (Keys)(int)keyData & Keys.KeyCode;

if (keyCode == Keys.Tab)
{
if (bHourChecked)
{
obj  = ((TimeSheetLaborSubControl)(ctlMain.CurrentControl)).CtxMenu.SourceControl;
int X = ((JwdaTextBox)(obj)).Bounds.X + this.Bounds.X + ctlMain.Bounds.X;
int Y = ((JwdaTextBox)(obj)).Bounds.Y + this.Bounds.Y + ctlMain.Bounds.Y + ((JwdaTextBox)(obj)).Parent.Bounds.Y + 60;  Point  aa = new Point(X,Y);
HourForm hf = new HourForm();
hf.MdiParent = this.MdiParent;
hf.StartPosition = FormStartPosition.Manual;
hf.Location = aa;
hf.Datum = m_Data[ctlMain.CurrentControl.LineNo];
hf.strFlag = ((JwdaTextBox)(obj)).Name.Substring(10,1); ctlMain.TabStop = false;
hf.Show();
hf.Focus();
hf.Hrs1.Focus(); return true;// Hours_Click(((TimeSheetLaborSubControl)(ctlMain.CurrentControl)).CtxMenu.MenuItems[0], new System.EventArgs() );

}
}

return base.ProcessCmdKey (ref msg, keyData);
}
新出现窗体代码:protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
Keys keyCode = (Keys)(int)keyData & Keys.KeyCode;// if (msg.Msg == WM_KEYUP)
// {
if (keyCode == Keys.Tab)
{
if (ICount >= 2 &&  bGet)
{
Close();
}
ICount++;
}
// }
return base.ProcessCmdKey (ref msg, keyData);
}
MDI Container 窗体代码:private void TimeKeeperMainForm_MdiChildActivate(object sender, System.EventArgs e)
{
if (this.ActiveMdiChild is TimeSheetLaborForm)
{
foreach (Form form in this.MdiChildren)
{
if (form is HourForm)
{
((TimeSheetLaborForm)(this.MdiChildren[0])).DetailDatum = ((HourForm)(form)).Datum;
form.Close();
}
if (form is CommentForm)
{
// ((TimeSheetLaborForm)(this.MdiChildren[0])).DetailDatum = ((HourForm)(form)).Datum;
form.Close();
}
}
}
}