Question

Existe-t-il un moyen de définir un ShowDialog () pour qu'il ne soit pas au top? J'ai examiné toutes les questions relatives à la SO et aucune à la ne correspondait à ma situation.

Ce que je fais est d'ouvrir un nouveau WinForm à partir d'une colonne de bouton datagridview. Ce nouveau formulaire extrait les informations de quelques tables SQLite et permet à l’utilisateur d’ajouter des informations à la ligne sur laquelle le bouton a été cliqué.

J'ouvre WinForm en utilisant le code ci-dessous. J'utilise la méthode ShowDialog () afin de pouvoir savoir si l'utilisateur enregistre les informations dans le formulaire ou les annule.

Pay_Bill_Window paywindow = new Pay_Bill_Window(getClickedRowID);
if (paywindow.ShowDialog() == DialogResult.OK)
{
    FillPendingPaymentDataGrid(dbAccess.GetPendingBills());
}

Je le fais pour que je sache si je dois recharger les informations dans la vue de la vue de données.

Les informations que l'utilisateur peut renseigner dans la fenêtre proviennent d'autres sources, telles qu'un navigateur Web. Il n'est donc pas idéal de placer le formulaire au-dessus de toutes les applications.

Existe-t-il un moyen d'empêcher la fenêtre de s'afficher au-dessus de toutes les applications (le mieux dans ma série de fenêtres est acceptable), ou existe-t-il un moyen d'indiquer le bouton sur lequel l'utilisateur clique sur un autre formulaire (en gros, en utilisant paywindow.Show () et en recherchant un type de retour différent)?

Merci pour toute aide!

Était-ce utile?

La solution

utilisez quelque chose comme ceci: formulaire1:

  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 le formulaire2, FormIsClosing se déclenche et vous pouvez l'attraper dans from1;)

Autres conseils

Par défaut, un formulaire ne doit pas être considéré comme TopMost dans le sens "pour toutes les applications". Si vous constatez 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);
  ...
}

Je n'ai pas trouvé de moyen d'empêcher que le formulaire soit placé au premier plan lorsqu'il est affiché avec ShowDialog () (cela présente le formulaire en tant que modal et je ne sais pas comment le remplacer. il).

Cependant, j'ai trouvé un moyen de surveiller le second formulaire, lorsque affiché avec Show () , en recherchant l'événement form.Disposed dans Cette question de StackOverflow .

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; 
}

Autant que je sache, cela ne me permet pas de voir pourquoi le formulaire a été fermé (comme avec DialogResult ), de sorte que l'événement se déclenche à chaque formulaire ferme, ce qui convient à ma situation.

paywindow.ShowDialog(this)

devrait fonctionner. le paramètre additionnel indique comment le parent est et le placera au dessus du parent, mais pas en haut. En haut signifie que la fenêtre restera sur votre bureau même lorsque vous activez une autre fenêtre. Ce n'est pas un comportement par défaut pour un ShowDialog. Comme JaredPar l’a mentionné, définissez votre formulaire / fenêtre sur TopMost = false sur true.

paywindow.ShowDialog(this)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top