Return values from dialog box

后端 未结 4 1032
不知归路
不知归路 2020-12-21 05:58

how to send and return values in modal dialog form

相关标签:
4条回答
  • 2020-12-21 06:28

    I usually do something like this:

    public class MyInputDialog : Form {
       public static string Execute(string Prompt) {
          using (var f = new MyInputDialog() ) {
             f.lblPrompt.Text = Prompt;
             f.ShowModal();
             return f.txtInput.Text;
          }
       }
    }
    

    Leaving out all the error handling, what if the user cancels, etc.

    0 讨论(0)
  • 2020-12-21 06:38

    Try this. It's designed to be a counterpart to MessageBox. It doesn't change its styling based on OS, though. It looks like Vista's.

    Here's an example of it in action, from it's original home (a Paint.NET plugin). It will expand to fit the prompt.

    InputBox.cs:

        internal partial class InputBoxForm : Form
        {
            Size lbltextoriginalsize;
            Size pnlwhiteoroginalsize;
            public InputBoxForm(string text, string defaultvalue, string caption)
            {
                InitializeComponent();
                this.pnlWhite.Resize += new System.EventHandler(this.pnlWhite_Resize);
                this.lblText.Resize += new System.EventHandler(this.lblText_Resize);
                picIcon.Image = SystemIcons.Question.ToBitmap();
                lbltextoriginalsize = lblText.Size;
                pnlwhiteoroginalsize = pnlWhite.Size;
                this.lblText.Text = text;
                this.txtOut.Text = defaultvalue;
                this.Text = caption;
            }
    
            private void lblText_Resize(object sender, EventArgs e)
            {
                pnlWhite.Size += lblText.Size - lbltextoriginalsize;
            }
    
            private void pnlWhite_Resize(object sender, EventArgs e)
            {
                this.Size += pnlWhite.Size - pnlwhiteoroginalsize;
            }
    
            public string Value
            {
                get { return txtOut.Text; }
            }
        }
    
        /// 
        /// A counterpart to the MessageBox class, designed to look similar (at least on Vista)
        /// 
        public static class InputBox
        {
            public static DialogResult Show(string text, out string result)
            {
                return ShowCore(null, text, null, null, out result);
            }
            public static DialogResult Show(IWin32Window owner, string text, out string result)
            {
                return ShowCore(owner, text, null, null, out result);
            }
            public static DialogResult Show(string text, string defaultValue, out string result)
            {
                return ShowCore(null, text, defaultValue, null, out result);
            }
            public static DialogResult Show(IWin32Window owner, string text, string defaultValue, out string result)
            {
                return ShowCore(owner, text, defaultValue, null, out result);
            }
            public static DialogResult Show(string text, string defaultValue, string caption, out string result)
            {
                return ShowCore(null, text, defaultValue, caption, out result);
            }
            public static DialogResult Show(IWin32Window owner, string text, string defaultValue, string caption, out string result)
            {
                return ShowCore(owner, text, defaultValue, caption, out result);
            }
    
            private static DialogResult ShowCore(IWin32Window owner, string text, string defaultValue, string caption, out string result)
            {
                InputBoxForm box = new InputBoxForm(text, defaultValue, caption);
                DialogResult retval = box.ShowDialog(owner);
                result = box.Value;
                return retval;
            }
        }
    

    InputBox.Designer.cs:

        partial class InputBoxForm
        {
            /// 
            /// Required designer variable.
            /// 
            private System.ComponentModel.IContainer components = null;
    
            /// 
            /// Clean up any resources being used.
            /// 
            /// true if managed resources should be disposed; otherwise, false.
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
    
            #region Windows Form Designer generated code
    
            /// 
            /// Required method for Designer support - do not modify
            /// the contents of this method with the code editor.
            /// 
            private void InitializeComponent()
            {
                this.pnlWhite = new System.Windows.Forms.Panel();
                this.lblText = new System.Windows.Forms.Label();
                this.picIcon = new System.Windows.Forms.PictureBox();
                this.txtOut = new System.Windows.Forms.TextBox();
                this.btnOK = new System.Windows.Forms.Button();
                this.btnCancel = new System.Windows.Forms.Button();
                this.pnlWhite.SuspendLayout();
                ((System.ComponentModel.ISupportInitialize)(this.picIcon)).BeginInit();
                this.SuspendLayout();
                // 
                // pnlWhite
                // 
                this.pnlWhite.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                            | System.Windows.Forms.AnchorStyles.Left)
                            | System.Windows.Forms.AnchorStyles.Right)));
                this.pnlWhite.BackColor = System.Drawing.Color.White;
                this.pnlWhite.Controls.Add(this.lblText);
                this.pnlWhite.Controls.Add(this.picIcon);
                this.pnlWhite.Controls.Add(this.txtOut);
                this.pnlWhite.Location = new System.Drawing.Point(0, 0);
                this.pnlWhite.Margin = new System.Windows.Forms.Padding(0);
                this.pnlWhite.MinimumSize = new System.Drawing.Size(235, 84);
                this.pnlWhite.Name = "pnlWhite";
                this.pnlWhite.Size = new System.Drawing.Size(235, 84);
                this.pnlWhite.TabIndex = 0;
                // 
                // lblText
                // 
                this.lblText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                            | System.Windows.Forms.AnchorStyles.Left)));
                this.lblText.AutoSize = true;
                this.lblText.Location = new System.Drawing.Point(64, 26);
                this.lblText.Margin = new System.Windows.Forms.Padding(3, 0, 30, 30);
                this.lblText.MinimumSize = new System.Drawing.Size(159, 0);
                this.lblText.Name = "lblText";
                this.lblText.Size = new System.Drawing.Size(159, 13);
                this.lblText.TabIndex = 2;
                // 
                // picIcon
                // 
                this.picIcon.BackColor = System.Drawing.Color.White;
                this.picIcon.Location = new System.Drawing.Point(25, 26);
                this.picIcon.Name = "picIcon";
                this.picIcon.Size = new System.Drawing.Size(32, 32);
                this.picIcon.TabIndex = 1;
                this.picIcon.TabStop = false;
                // 
                // txtOut
                // 
                this.txtOut.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
                            | System.Windows.Forms.AnchorStyles.Right)));
                this.txtOut.Location = new System.Drawing.Point(67, 50);
                this.txtOut.Name = "txtOut";
                this.txtOut.Size = new System.Drawing.Size(159, 20);
                this.txtOut.TabIndex = 5;
                // 
                // btnOK
                // 
                this.btnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
                this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK;
                this.btnOK.Location = new System.Drawing.Point(42, 96);
                this.btnOK.Name = "btnOK";
                this.btnOK.Size = new System.Drawing.Size(88, 26);
                this.btnOK.TabIndex = 3;
                this.btnOK.Text = "OK";
                this.btnOK.UseVisualStyleBackColor = true;
                // 
                // btnCancel
                // 
                this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
                this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
                this.btnCancel.Location = new System.Drawing.Point(138, 96);
                this.btnCancel.Name = "btnCancel";
                this.btnCancel.Size = new System.Drawing.Size(88, 26);
                this.btnCancel.TabIndex = 4;
                this.btnCancel.Text = "Cancel";
                this.btnCancel.UseVisualStyleBackColor = true;
                // 
                // InputBoxForm
                // 
                this.AcceptButton = this.btnOK;
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.CancelButton = this.btnCancel;
                this.ClientSize = new System.Drawing.Size(235, 133);
                this.Controls.Add(this.btnCancel);
                this.Controls.Add(this.btnOK);
                this.Controls.Add(this.pnlWhite);
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
                this.MaximizeBox = false;
                this.MinimizeBox = false;
                this.Name = "InputBoxForm";
                this.ShowIcon = false;
                this.ShowInTaskbar = false;
                this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
                this.pnlWhite.ResumeLayout(false);
                this.pnlWhite.PerformLayout();
                ((System.ComponentModel.ISupportInitialize)(this.picIcon)).EndInit();
                this.ResumeLayout(false);
    
            }
    
            #endregion
    
            private System.Windows.Forms.Panel pnlWhite;
            private System.Windows.Forms.PictureBox picIcon;
            private System.Windows.Forms.Label lblText;
            private System.Windows.Forms.Button btnOK;
            private System.Windows.Forms.Button btnCancel;
            private System.Windows.Forms.TextBox txtOut;
        }
    0 讨论(0)
  • 2020-12-21 06:40

    This is how I would call the dialog box

     var regStoreForm = new RegisterStoreForm(storeID,password);
                if (regStoreForm.ShowDialog(this) == DialogResult.OK)
                {
                    storeID = regStoreForm.StoreId;
                    password = regStoreForm.StorePassword;
                };
                regStoreForm.Dispose();
    

    And this is what the Dialog box looks like

     public partial class RegisterStoreForm : Form
        {
            public int StoreId { get; set; }
            public String StorePassword { get; set; }
    
            public RegisterStoreForm(int storeId,string password)
            {
                InitializeComponent();
                StoreId = storeId;
                StorePassword = password;
                this.textBoxPassword.Text = StorePassword;
                this.textBoxStoreId.Text = StoreId.ToString();
            }
    
            private void OKbutton_Click(object sender, EventArgs e)
            {
                StoreId = Convert.ToInt16(textBoxStoreId.Text);
                StorePassword = textBoxPassword.Text;
                this.DialogResult = DialogResult.OK;
                this.Close();
            }
        }
    
    0 讨论(0)
  • 2020-12-21 06:46

    I suggest you Interaction.InputBox (Microsoft.VisualBasic reference needed):

    inputValue = Interaction.InputBox("Text for the prompt", "Title of the dialog", "");
    

    When user presses Cancel, inputValue will be "".

    0 讨论(0)
提交回复
热议问题