J'ai un problème assez étrange mais reproductible. J'ai un MenuStrip
qui peut ouvrir un nouveau formulaire Modeless avec la méthode Form.Show()
.Le formulaire parent est mis en avant lorsque l'on clique sur la barre de menu d'un formulaire enfant
La forme enfant possède également une barre de menu.
Les choses étranges se produit lorsque vous démarrez en cliquant sur la bande de menu de la forme de l'enfant. Ensuite, le formulaire parent revient au premier plan et dit bonjour. C'est une vraie douleur.
Comment éviter ce problème?
Un film Scorcese pour illustrer mon problème en suivant ce lien zippyshare.com (3Mo)
Comme vous pouvez le voir dans la vidéo, la forme mère ne prend pas le focus, il est juste devant bringed par somehing autre.
Notez que repacing la MenuStrip
par un ToolStrip
corriger le problème.
code pour reproduire le problème:
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();
}
}
Il semble que votre formulaire génère une nouvelle instance de lui-même. Cela pourrait causer beaucoup de problèmes. Mieux engendrer une instance de quelque chose d'autre. –
Je ne vois pas quel genre de problème cela pourrait faire. Avez-vous un exemple? –
Non, je n'ai pas d'exemple. Si je l'ai fait, j'aurais écrit une réponse, pas un commentaire. Mais vous avez deux formes sans parent nommées identiques contenant des contrôles nommés de manière identique. Je soupçonnerais que c'est le problème avant que je suspecte quoi que ce soit d'autre. –