在我的mdi应用程序中,我有四个mdichild窗体,其中一个用作背景并持有一些控件。
当使用Ctrl+Tab在其他mdichild表单之间切换时,如何防止这个后台mdichild表单获得焦点/激活?
换句话说,如何从Ctrl+Tab序列中跳过这个后台MDI子窗体?并将其z顺序设置为最后一个,这样当在它们之间切换时,它就不会隐藏其他mdichild形式?
提前谢谢。
发布于 2011-10-02 21:19:15
通过重写Form.ProcessCmdKey并跳过背景窗体。
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if ((keyData & Keys.Tab) == Keys.Tab && (keyData & Keys.Control) == Keys.Control)
{
Form nextForm = GetNexMdiChildForm();
if (nextForm != null)
{
nextForm.Activate();
return false;
}
}
return base.ProcessCmdKey(ref msg, keyData);
}
private Form GetNexMdiChildForm()
{
//get current form index
Form currentForm = this.ActiveMdiChild;
int currentFormIndex = Array.IndexOf(this.MdiChildren, currentForm);
//get next form index
int nextFormIndex = currentFormIndex + 1;
if (this.MdiChildren.Length == nextFormIndex)
{
nextFormIndex = 0;
}
//check if next form is Form 3
if (this.MdiChildren[nextFormIndex] == background_mdichild_form )
{
nextFormIndex++;
if (this.MdiChildren.Length == nextFormIndex)
{
nextFormIndex = 0;
}
}
return MdiChildren[nextFormIndex];
}https://stackoverflow.com/questions/7585080
复制相似问题