C# 从对话框返回值
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/818785/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Return values from dialog box
提问by Arunachalam
how to send and return values in modal dialog form
如何以模态对话框形式发送和返回值
采纳答案by bsneeze
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.
尝试这个。它被设计为与 MessageBox 对应。但是,它不会根据操作系统更改其样式。它看起来像Vista的。
Here's an example of it in action, from it's original home (a Paint.NET plugin). It will expand to fit the prompt.
这是它的一个示例,来自它的原始主页(Paint.NET 插件)。它将扩展以适应提示。
InputBox.cs:
输入框.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:
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;
}
回答by Blorgbeard is out
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.
省略所有错误处理,如果用户取消等等。
回答by bluish
I suggest you Interaction.InputBox
(Microsoft.VisualBasic
reference needed):
我建议你Interaction.InputBox
(Microsoft.VisualBasic
需要参考):
inputValue = Interaction.InputBox("Text for the prompt", "Title of the dialog", "");
When user presses Cancel, inputValue
will be ""
.
当用户按下取消时,inputValue
将是""
。
回答by Griffo
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();
}
}