cómo enviar y devolver valores en el cuadro de diálogo modal de forma

  • Necesita más información. Qué marco estás usando?
  • Algunas aclaraciones estaría bien, sí. En mi respuesta a continuación supuse que usted está buscando un tipo de cuadro de entrada similar a la de la clase MessageBox, pero que acepta una cadena de entrada.
InformationsquelleAutor Arunachalam | 2009-05-04

4 Comentarios

  1. 5

    Probar esta. Está diseñado para ser una contraparte de un MessageBox. No cambia su estilo basado en el sistema operativo, sin embargo. Parece que Vista.

    He aquí un ejemplo de la acción, de la que es original de la casa (un Paint.NET plugin).
    Se expande para adaptarse a la petición.

    Los valores de retorno de cuadro de diálogo

    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.El diseñador.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;
    }
  2. 4

    Yo suelo hacer algo parecido a esto:

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

    Dejando fuera todo el manejo de errores, lo que si el usuario cancela, etc.

    • Yo siempre era la definición de propiedades en el cuadro de diálogo modal y, a continuación, leer de nuevo desde el formulario principal. La solución parece más cleaner (sólo para un parámetro de retorno), sin embargo no se devuelve el valor de retorno de ShowModel. Así que, no sabemos si el usuario hace clic en la X, o realmente cambiar algo.
    • Eso es cierto. Yo a veces devolverá null para cancelar si le parece apropiado, o bien pasar un valor por defecto para Ejecutar, y pasar de nuevo si se cancela.
    • Para más de un parámetro de retorno, se podría definir una clase o struct la encapsulación de todos ellos, y devolver una instancia de la misma.
  3. 1

    Sugiero que Interaction.InputBox (Microsoft.VisualBasic de referencia es necesario):

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

    Cuando el usuario presiona Cancelar, inputValue será "".

  4. 1

    Esta es la forma en que yo llamaría el cuadro de diálogo

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

    Y esto es lo que el cuadro de Diálogo se parece a

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

Dejar respuesta

Please enter your comment!
Please enter your name here