我有一个非常奇怪但可重现的问题。
我有一个MenuStrip
可以使用该方法打开一个新的无模式表单Form.Show()
。
子窗体也有一个菜单条。
当您通过单击子窗体的菜单条开始时会发生奇怪的事情。然后父表单返回前台并打招呼。那是一个真正的痛苦。
如何预防这个问题?
通过点击此链接zippyshare.com (3Mo)的 Scorcese 电影来说明我的问题
正如您在视频中看到的那样,父表单没有获得焦点,它只是被其他东西带到了前面。
请注意,MenuStrip
通过ToolStrip
更正问题来解决问题。
重现问题的一些代码:
public class DemoLostfocus : Form
{
private void InitializeComponent()
{
this.menuStrip1 = new MenuStrip();
this.fileToolStripMenuItem = new ToolStripMenuItem();
this.openModelessFormToolStripMenuItem = new ToolStripMenuItem();
this.menuStrip1.SuspendLayout();
this.SuspendLayout();
this.menuStrip1.Items.AddRange(new ToolStripItem[] {
this.fileToolStripMenuItem});
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
this.menuStrip1.Name = "menuStrip1";
this.menuStrip1.Size = new System.Drawing.Size(284, 24);
this.menuStrip1.TabIndex = 0;
this.menuStrip1.Text = "menuStrip1";
this.fileToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] {
this.openModelessFormToolStripMenuItem});
this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
this.fileToolStripMenuItem.Text = "File";
this.openModelessFormToolStripMenuItem.Name = "openModelessFormToolStripMenuItem";
this.openModelessFormToolStripMenuItem.Size = new System.Drawing.Size(187, 22);
this.openModelessFormToolStripMenuItem.Text = "Open Modeless Form";
this.openModelessFormToolStripMenuItem.Click += new System.EventHandler(this.openModelessFormToolStripMenuItem_Click);
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 262);
this.Controls.Add(this.menuStrip1);
this.MainMenuStrip = this.menuStrip1;
this.Name = "DemoLostfocus";
this.Text = "DemoLostfocus";
this.menuStrip1.ResumeLayout(false);
this.menuStrip1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
private MenuStrip menuStrip1;
private ToolStripMenuItem fileToolStripMenuItem;
private ToolStripMenuItem openModelessFormToolStripMenuItem;
public DemoLostfocus()
{
InitializeComponent();
}
private void openModelessFormToolStripMenuItem_Click(object sender, EventArgs e)
{
(new DemoLostfocus()).Show();
}
}