2010-11-02 8 views
4

Je ne suis pas sûr si cela est autorisé mais j'ai un formulaire principal qui appelle un autre formulaire avec ShowDialog qui tente d'appeler un autre formulaire identique.C# ShowDialog appelant un autre ShowDialog

Ainsi, par exemple:

form1 -> form2.showdialog -> form3.showdialog

Je reçois une erreur au ShowDialog de Form3:

var ssscu = new SSS.SssTwainSimple.MainForm(); 
ssscu.ShowDialog(); 

C'est l'erreur :

{"Form showDialog tried to set an ineligible form as its owner. Forms cannot own themselves or their owners.\r\nParameter name: owner"}

Je ne suis pas sûr de comprendre quel est le problème, je ne suis pas autorisé à appeler comme howdialog d'une forme qui est un dialogue?

Merci, Eroc

+0

Ajouter un MDI autorisant les formulaires parent-enfant? – brumScouse

+0

Cela a été provoqué car le formulaire ssscu se transmettait à un autre formulaire en tant que propriétaire dans le chargement ... J'ai déplacé la passe et cela a fonctionné. Merci pour l'aide! – ErocM

Répondre

4

am I not allowed to call a showdialog from a form that is a dialog?

Vous êtes certainement autorisé, cela devrait fonctionner.

Mais je pense qu'il est étrange que vous créez un formulaire de dialogue appelé MainForm.

Je m'attends à ce que ce soit causé par d'autres choses qui se passent dans les événements. Que fait MainForm dans son constructeur/Load-event?

+0

C'était le problème, le programmeur avait le projet appelant en train de faire quelque chose dans la charge. +1 !! Je vous remercie! – ErocM

3

Essayez de remplacer .ShowDialog(); avec .ShowDialog(this);

Edit: Je ne me suis pas essayé, mais c'est là que je commencerais à la recherche.

3

C'est une exception très inhabituelle. Le formulaire a déjà un propriétaire lorsqu'il a été créé par le constructeur. Vous n'avez pas utilisé le remplacement ShowDialog (propriétaire) afin que Windows Forms doit trouver un propriétaire pour lui-même. Il retrouve exactement la même forme. C'est techniquement possible, mais il faudrait écrire un code assez étrange. Pour diagnostiquer cela, ajoutez ce code au formulaire:

protected override void OnHandleCreated(EventArgs e) { 
     base.OnHandleCreated(e); 
    } 

Et définissez un point d'arrêt dessus. Si ma supposition est correcte, cela va casser avant l'appel ShowDialog. Regardez la pile des appels pour voir quelle déclaration obtient cette fenêtre créée.

+0

+1 puisque c'était vrai ... l'application appelée était en faute. Le nom est mainform puisque le contrôle wpf qui l'appelle est dans un projet et que le winform appelé est un autre projet, tous deux dans la même solution. :) – ErocM

Questions connexes