Ahmad
Ahmad

Reputation: 13406

Easiest way to create a custom dialog box which returns a value?

I want to create a custom dialog box for my C# project. I want to have a DataGridView in this custom dialog box, and there will also be a button. When the user clicks this button, an integer value is returned to the caller, and the dialog box then terminates itself.

How can I achieve this?

Upvotes: 25

Views: 119011

Answers (5)

Gurvir Lochab
Gurvir Lochab

Reputation: 1

    public partial class DialogFormDisplay : Form
{
    public DialogFormDisplay()
    {
        InitializeComponent();
    }
    string dialogcode;
    public void Display(string code, string title, string description)
    {
        dialogcode = code;
        switch (code)
        {
            case "YesNo":
                btnLeft.Text = "Yes";
                btnLeft.BackColor = Color.ForestGreen;
                btnLeft.ForeColor = Color.White;
                btnRight.Text = "No";
                btnRight.BackColor = Color.Red;
                btnRight.ForeColor = Color.White;
                break;
            default:
                break;
        }
        displayTitle.Text = title;
        displayMessage.Text = description;
    }

    private void btnLeft_Click(object sender, EventArgs e)
    {
        dialogResultLeft(dialogcode);
    }

    private void btnRight_Click(object sender, EventArgs e)
    {
        dialogResultRight(dialogcode);
    }
    void dialogResultLeft(string code)
    {
        switch (code)
        {
            case "YesNo":
                DialogResult = DialogResult.Yes;
                MessageBox.Show("You pressed " + DialogResult);
                break;
            default:
                break;
        }
    }
    void dialogResultRight(string code)
    {
        switch (code)
        {
            case "YesNo":
                DialogResult = DialogResult.No;
                MessageBox.Show("You pressed " + DialogResult);
                break;
            default:
                break;
        }
    }
}

You can check this out on https://github.com/gurvirlochab/CustomNotifications Here is a sample screenshot of the DialogBox

Upvotes: -1

Karim Mirshahi
Karim Mirshahi

Reputation: 45

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

Upvotes: 2

Karim Mirshahi
Karim Mirshahi

Reputation: 45

//combo box dialog c#
//
public static string DialogCombo(string text,DataTable comboSource,string DisplyMember,string ValueMember)
    {
        //comboSource = new DataTable();


        Form prompt = new Form();
        prompt.RightToLeft = RightToLeft.Yes;
        prompt.Width = 500;
        prompt.Height = 200;
        Label textLabel = new Label() { Left = 350, Top = 20, Text = text };
        ComboBox combo = new ComboBox { Left = 50, Top = 50, Width = 400 };
        combo.DataSource = comboSource;
        combo.ValueMember = ValueMember;
        combo.DisplayMember = DisplyMember;
        Button confirmation = new Button() { Text = "تایید", Left = 350, Width = 100, Top = 70 };
        confirmation.Click += (sender, e) => { prompt.Close(); };
        prompt.Controls.Add(confirmation);
        prompt.Controls.Add(textLabel);
        prompt.Controls.Add(combo);
        prompt.ShowDialog();

        return combo.SelectedValue.ToString();
    }

Upvotes: -1

Steve
Steve

Reputation: 216243

  1. On your button set the DialogResult property to DialogResult.OK
  2. On your dialog set the AcceptButton property to your button
  3. Create a public property in your form called Result of int type
  4. Set the value of this property in the click event of your button
  5. Call your dialog in this way

    using(myDialog dlg = new myDialog())
    {
        if(dlg.ShowDialog() == DialogResult.OK)
        {
            int result = dlg.Result;
            // whatever you need to do with result
        }
    }
    

Upvotes: 24

Bas
Bas

Reputation: 27085

There is no prompt dialog box in C#. You can create a custom prompt box to do this instead.

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

Then call it using:

 int promptValue = Prompt.ShowDialog("Test", "123");

Upvotes: 43

Related Questions