从对话框返回值

如何在modal dialog窗体中发送和返回值

试试这个。 它被设计成MessageBox的对应物。 但是,它并没有改变基于操作系统的样式。 它看起来像Vista的。

这是一个实际的例子,来自它的原始主页(一个Paint.NET插件)。 它将扩展以适应提示。

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

我通常做这样的事情:

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

省略所有error handling,如果用户取消,等等。

我建议你使用Interaction.InputBox (需要Microsoft.VisualBasic引用):

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

当用户按下Cancel时, inputValue将为""

这就是我调用对话框的方式

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

这就是对话框的样子

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