2009-05-04 103 views
3

返回值如何发送和模态对话框的形式从对话框

+0

需要更多的信息。你在用什么框架? – 2009-05-04 04:40:19

+0

一些澄清会很好,是的。在我的回答中,我假设你正在寻找一种类似于MessageBox类的输入框,但它接受一个字符串输入。 – bsneeze 2009-05-04 04:53:50

回答

5

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

下面是一个例子,它是从原来的home(一个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; 
    }
4

返回值我平时做这样的事情:

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

离开了所有的错误处理,如果用户取消什么,等。

1

我建议你Interaction.InputBoxMicrosoft.VisualBasic参考需要):

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

当用户按下取消时,inputValue将为""

1

这是我会怎么调用对话框

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