2009-05-03 12 views
1

Y at-il un moyen que je peux définir un ShowDialog() pour ne pas être le plus haut? J'ai regardé toutes les questions SO connexes, et aucun tout à fait correspondait à ma situation.Puis-je définir ShowDialog() pour ne pas être le plus haut?

Ce que je fais est d'ouvrir un nouveau WinForm à partir d'une colonne de bouton datagridview. Cette nouvelle forme extrait des informations de quelques tables SQLite et permet à l'utilisateur d'ajouter des informations à la ligne sur laquelle le bouton a été cliqué. J'ouvre le WinForm en utilisant le code ci-dessous

J'utilise la méthode ShowDialog() pour savoir si l'utilisateur enregistre les informations dans le formulaire ou les annule. Je fais cela afin que je puisse dire si j'ai besoin de recharger les informations dans la vue de données.

Les informations que l'utilisateur peut remplir dans la fenêtre proviennent d'autres sources, comme un navigateur Web, de sorte que le formulaire soit au-dessus de toutes les applications n'est pas idéal.

Y at-il un moyen que je peux arrêter la fenêtre d'être au-dessus de toutes les applications (le plus haut dans ma série de fenêtres est bien), ou est-il un moyen de dire quel bouton un utilisateur clique sur un autre formulaire , en utilisant paywindow.Show() et en regardant un autre type de retour)?

Merci pour toute aide!

Répondre

1

utiliser quelque chose comme ceci: form1:

private void button1_Click(object sender, EventArgs e) 
     { 
      Form2 frm = new Form2(); 
      frm.Show(); 
      frm.FormIsClosing += frm_FormIsClosing; 

     } 

     void frm_FormIsClosing(object sender, DialogResult rsl) 
     { 
      if (rsl == System.Windows.Forms.DialogResult.Yes) 
       MessageBox.Show("We got it"); 
     } 

form2:

public delegate void IsClosing(object sender, DialogResult rsl); 

     public event IsClosing FormIsClosing; 


     private void Form2_FormClosed(object sender, FormClosedEventArgs e) 
     { 
      FormIsClosing(this, System.Windows.Forms.DialogResult.Yes); 
     } 

alors vous fermez la form2, FormIsClosing feux et vous pouvez l'attraper dans partir1;)

+0

J'étais à peu près sûr que cela allait marcher, mais je ne pourrais jamais obtenir les événements Form2_FormClosed ou Form2_FormClosing. J'ai trouvé une réponse en regardant form2 pour être disposé dans une autre question SO. Merci! –

+2

vous devez ajouter Form2_FormClosed à l'événement Closed de form2! de toute façon, bonne chance – Sadegh

+0

Je ne sais pas ce que j'ai fait la première fois, mais j'ai revérifié l'événement FormClosed et il n'a pas été mis en œuvre correctement - c'est la solution dont j'ai besoin - merci! –

-1
paywindow.ShowDialog(this) 
+0

quoi de neuf, hein? – Sadegh

+0

le parent de la boîte de dialogue – DaDa

+0

je sais, mais son non-sens, ce n'est pas lié à la question du tout, il suffit de l'essayer – Sadegh

1

Par défaut, un formulaire ne devrait pas être TopMost dans le sens "pour toutes les applications". Si vous voyez ce comportement, c'est probablement parce que la propriété a été définie dans le concepteur. Désactivez la propriété dans le concepteur ou essayez ce qui suit.

using (Form form = CreateMyForm()) { 
    form.TopMost = false; 
    form.ShowDialog(parent); 
    ... 
} 
+0

Le problème est que j'ouvre le formulaire avec ShowDialog() plutôt que Show(). Selon MSDN/Google, ShowDialog() ouvre un formulaire modal, nécessitant une interaction avant de retourner au formulaire parent. Je pense que votre méthode fonctionnerait si j'ouvrais le formulaire avec Show(). –

0

Je ne l'ai pas trouvé un moyen d'éviter la forme d'être plus haut quand représenté avec ShowDialog() (ce qui montre la forme comme modale, et je ne sais pas comment la contourner).

Cependant, j'ai trouvé un moyen de surveiller le second formulaire, lorsqu'il est affiché avec Show(), en regardant l'événement form.Disposed dans this StackOverflow question.

De Ian:

Form2 form2 = null; 

void button_click(object sender, EventArgs e) 
{  
    if(form2 == null) 
    { 
     form2 = new Form2(); 
     form2.Disposed += new EventHandler(f_Disposed); 
     form2.Show(); 
    } 
} 

void f_Disposed(object sender, EventArgs e) 
{ 
    form2 = null; 
} 

Pour autant que je peux dire, cela ne me permet pas de voir pourquoi la forme a été fermée (comme avec DialogResult), de sorte que l'événement se déclenche chaque temps la forme se ferme, ce qui est normal pour ma situation.

0
paywindow.ShowDialog(this) 

devrait fonctionner. le paramètre supplémentaire indique comment le parent est et va le faire passer au-dessus du parent, mais pas le plus haut. Le plus haut signifie que la fenêtre restera sur votre bureau même lorsque vous activez une autre fenêtre. Ce n'est pas le comportement par défaut pour un ShowDialog.Comme JaredPar mentionné, définissez votre formulaire/fenêtre à TopMost = false pour être vrai.