web-dev-qa-db-fra.com

Le moyen le plus simple de créer une boîte de dialogue personnalisée qui renvoie une valeur?

Je veux créer une boîte de dialogue personnalisée pour mon projet C # .. Je veux avoir un DataGridView dans cette boîte de dialogue personnalisée, et il y aura également un bouton .. Lorsque l'utilisateur clique sur ce bouton, une valeur entière est renvoyée à l'appelant , et la boîte de dialogue se ferme ensuite.

Comment puis-je atteindre cet objectif ?

18
Ahmad

Il n'y a pas de boîte de dialogue d'invite en C #. Vous pouvez créer une boîte d'invite personnalisée pour ce faire à la place.

  public static class Prompt
    {
        public static int ShowDialog(string text, string caption)
        {
            Form Prompt = new Form();
            Prompt.Width = 500;
            Prompt.Height = 100;
            Prompt.Text = caption;
            Label textLabel = new Label() { Left = 50, Top=20, Text=text };
            NumericUpDown inputBox = new NumericUpDown () { Left = 50, Top=50, Width=400 };
            Button confirmation = new Button() { Text = "Ok", Left=350, Width=100, Top=70 };
            confirmation.Click += (sender, e) => { Prompt.Close(); };
            Prompt.Controls.Add(confirmation);
            Prompt.Controls.Add(textLabel);
            Prompt.Controls.Add(inputBox);
            Prompt.ShowDialog();
            return (int)inputBox.Value;
        }
    }

Appelez-le ensuite en utilisant:

 int promptValue = Prompt.ShowDialog("Test", "123");
34
Bas
  1. Sur votre bouton, définissez la propriété DialogResult sur DialogResult.OK
  2. Dans votre boîte de dialogue, définissez la propriété AcceptButton sur votre bouton
  3. Créez une propriété publique dans votre formulaire appelée Résultat de type int
  4. Définissez la valeur de cette propriété dans l'événement de clic de votre bouton
  5. Appelez votre dialogue de cette façon

    using(myDialog dlg = new myDialog())
    {
        if(dlg.ShowDialog() == DialogResult.OK)
        {
            int result = dlg.Result;
            // whatever you need to do with result
        }
    }
    
16
Steve
public static DialogResult InputBox(string title, string promptText, ref string value,bool isDigit=false)
    {
        Form form = new Form();
        Label label = new Label();
        TxtProNet textBox = new TxtProNet();

        if (isDigit == true)
            textBox.TypeNumricOnly = true;

        textBox.Width = 1000;
        Button buttonOk = new Button();
        Button buttonCancel = new Button();

        form.Text = title;
        label.Text = promptText;
        textBox.Text = value;

        buttonOk.Text = "OK";
        buttonCancel.Text = "Cancel";
        buttonOk.DialogResult = DialogResult.OK;
        buttonCancel.DialogResult = DialogResult.Cancel;

        label.SetBounds(9, 20, 372, 13);
        textBox.SetBounds(12, 36, 372, 20);
        buttonOk.SetBounds(228, 72, 75, 23);
        buttonCancel.SetBounds(309, 72, 75, 23);

        label.AutoSize = true;
        textBox.Anchor = textBox.Anchor | AnchorStyles.Right;
        buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
        buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;

        form.ClientSize = new Size(396, 107);
        form.Controls.AddRange(new Control[] { label, textBox, buttonOk, buttonCancel });
        form.ClientSize = new Size(Math.Max(300, label.Right + 10), form.ClientSize.Height);
        form.FormBorderStyle = FormBorderStyle.FixedDialog;
        form.StartPosition = FormStartPosition.CenterScreen;
        form.MinimizeBox = false;
        form.MaximizeBox = false;
        form.AcceptButton = buttonOk;
        form.CancelButton = buttonCancel;

        DialogResult dialogResult = form.ShowDialog();
        value = textBox.Text;
        return dialogResult;
    }
2
Karim Mirshahi