I have a pretty strange but reproductible problem.
I have a MenuStrip
which can open a new Modeless form with the Form.Show()
method.
The child form also have a Menu Strip.
The strange stuff happens when you start by clicking the menu strip of the child form. Then the parent form is coming back foreground and saying hello. That's a real pain.
How to prevent this problem?
A Scorcese movie to illustrate my problem by following this link zippyshare.com (3Mo)
As you can see in the video, parent form doesn't take focus, it is just bringed front by somehing else.
Note that repacing the MenuStrip
by a ToolStrip
correct the problem.
Some Code to reproduce the problem:
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();
}
}
(new DemoLostfocus()).Show();
gets garbage-collected immediately after it is created. That could be the source of lots of problems, too. – Arablenew DemoLostfocus().Show(this);
seems to solve the problem, but now it takes two clicks to open the child menu. – Kunming