web-dev-qa-db-ja.com

値を返すカスタムダイアログボックスを作成する最も簡単な方法は?

C#プロジェクトのカスタムダイアログボックスを作成します。このカスタムダイアログボックスにDataGridViewを追加します。ボタンもあります。ユーザーがこのボタンをクリックすると、整数値が呼び出し元に返されます。 、ダイアログボックスが終了します..

どうすればこれを達成できますか?

18
Ahmad

C#には[プロンプト]ダイアログボックスはありません。代わりに、これを行うカスタムプロンプトボックスを作成できます。

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

次に、以下を使用して呼び出します。

 int promptValue = Prompt.ShowDialog("Test", "123");
34
Bas
  1. ボタンで、DialogResultプロパティをDialogResult.OKに設定します
  2. ダイアログでAcceptButtonプロパティをボタンに設定します
  3. 結果のint型と呼ばれるパブリックプロパティをフォームに作成します
  4. ボタンのクリックイベントでこのプロパティの値を設定します
  5. この方法でダイアログを呼び出します

    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