Ola Pessoal.
Neste artigo eu vou falar de uma carência que o C# tem. O InputBox.
O C# não possui um InputBox, logo temos que criar um, aqui vai um código que facilita a vida.
Com este inputBox você pode tratar as teclas pressionadas pelo usuário, bem como modificar o título, o valor inicial, exibir uma mensagem ao usuário.
Bom, vamos deixar de falatório (ou seria escrevetório, nossa forcei agora). E vamos ao que interessa.
Vou assumir que você tem conhecimento em C#.
Crie um novo projeto to tipo Class Lybrary, isso irá criar para você uma DLL.
Na classe que veio como padrão, renomeie para InputBox.cs e utilize o código abaixo para fazer a sua DLL.
Copiar e colar amigável: http://desenvolvedores.net.pastebin.com/raw.php?i=czRKYN7F
Código:
/* * Exemplo de inpuBox em C#. * By http://desenvolvedores.net */ using System; using System.Windows.Forms; /* * definimos o namespace como System.Windows.Forms apenas * para manter no mesmo local que a MessageBox */ namespace System.Windows.Forms { #region Formulário internal sealed class _InputBox : System.Windows.Forms.Form { #region Locais internal System.Windows.Forms.TextBox txtInput; private Button cmdOK; private Button cmdCancel; internal Label lblUserInfo; private System.ComponentModel.Container components = null; /// <summary> /// tratar os eventos de pressionamento de teclas e develver ao usuário /// </summary> internal KeyPressEventHandler keyPress = null; #endregion #region Construtor public _InputBox() { InitializeComponent(); lblUserInfo.Text = ""; txtInput.Text = ""; } #endregion #region Métodos de criação e dipose do form protected override void Dispose(bool disposing) { if (disposing) { if (components != null) { components.Dispose(); } } base.Dispose(disposing); } private void InitializeComponent() { this.txtInput = new System.Windows.Forms.TextBox(); this.cmdOK = new System.Windows.Forms.Button(); this.cmdCancel = new System.Windows.Forms.Button(); this.lblUserInfo = new System.Windows.Forms.Label(); this.SuspendLayout(); // // txtInput // this.txtInput.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.txtInput.Location = new System.Drawing.Point(16, 16); this.txtInput.Name = "txtInput"; this.txtInput.Size = new System.Drawing.Size(256, 20); this.txtInput.TabIndex = 0; this.txtInput.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtInput_KeyDown); this.txtInput.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtInput_KeyPress); // // cmdOK // this.cmdOK.Anchor = System.Windows.Forms.AnchorStyles.Bottom; this.cmdOK.Location = new System.Drawing.Point(124, 46); this.cmdOK.Name = "cmdOK"; this.cmdOK.Size = new System.Drawing.Size(71, 26); this.cmdOK.TabIndex = 1; this.cmdOK.Text = "OK"; this.cmdOK.UseVisualStyleBackColor = true; this.cmdOK.Click += new System.EventHandler(this.cmdOK_Click); // // cmdCancel // this.cmdCancel.Anchor = System.Windows.Forms.AnchorStyles.Bottom; this.cmdCancel.Location = new System.Drawing.Point(201, 46); this.cmdCancel.Name = "cmdCancel"; this.cmdCancel.Size = new System.Drawing.Size(71, 26); this.cmdCancel.TabIndex = 2; this.cmdCancel.Text = "Cancelar"; this.cmdCancel.UseVisualStyleBackColor = true; this.cmdCancel.Click += new System.EventHandler(this.cmdCancel_Click); // // lblUserInfo // this.lblUserInfo.AutoSize = true; this.lblUserInfo.Location = new System.Drawing.Point(16, 0); this.lblUserInfo.MaximumSize = new System.Drawing.Size(256, 0); this.lblUserInfo.Name = "lblUserInfo"; this.lblUserInfo.Size = new System.Drawing.Size(140, 13); this.lblUserInfo.TabIndex = 3; this.lblUserInfo.Text = "XXXXXXXXXXXXXXXXXXX"; // // _InputBox // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 73); this.ControlBox = false; this.Controls.Add(this.lblUserInfo); this.Controls.Add(this.cmdCancel); this.Controls.Add(this.cmdOK); this.Controls.Add(this.txtInput); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.Name = "_InputBox"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "InputBox"; this.TopMost = true; this.Shown += new System.EventHandler(this._InputBox_Shown); this.ResumeLayout(false); this.PerformLayout(); } #endregion #region Método Show public new string Show() { base.ShowDialog(); return this.txtInput.Text; } #endregion #region Tratamento das ações do usuário private void txtInput_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { if (e.KeyCode == Keys.Enter) cmdOK.PerformClick(); else if (e.KeyCode == Keys.Escape) cmdCancel.PerformClick(); } private void cmdCancel_Click(object sender, EventArgs e) { txtInput.Text = ""; this.Close(); } private void cmdOK_Click(object sender, EventArgs e) { this.Close(); } private void _InputBox_Shown(object sender, EventArgs e) { //aqui temos que redimensionar o form por causa do tamanho da Label txtInput.Top = lblUserInfo.Top + lblUserInfo.Height + 5; this.Height = txtInput.Top + txtInput.Height + 60; } private void txtInput_KeyPress(object sender, KeyPressEventArgs e) { if (keyPress != null) keyPress.Invoke(sender, e); } #endregion } #endregion #region Classe InputBox public static class InputBox { #region Métodos Show /// <summary> /// Exibe a inputbox /// </summary> /// <returns>string digitada</returns> public static string Show() { return InputBox.Show("", "", "", null); } /// <summary> /// Exibe a inputbox /// </summary> /// <param name="Title">Título desejado</param> /// <param name="keyHandler">Delegate tipo KeyPressEventHandler para capturar as teclas pressionadas</param> /// <returns>string digitada</returns> public static string Show(string Title, KeyPressEventHandler keyHandler) { return InputBox.Show(Title, "", "", keyHandler); } /// <summary> /// Exibe a inputbox /// </summary> /// <param name="keyHandler">Delegate tipo KeyPressEventHandler para capturar as teclas pressionadas</param> /// <returns>string digitada</returns> public static string Show(KeyPressEventHandler keyHandler) { return InputBox.Show("", "", "", keyHandler); } /// <summary> /// Exibe a inputbox /// </summary> /// <param name="initalValue">Valor inicial da inputBox</param> /// <param name="keyHandler">Delegate tipo KeyPressEventHandler para capturar as teclas pressionadas</param> /// <returns>string digitada</returns> public static string Show(KeyPressEventHandler keyHandler, string initalValue) { return InputBox.Show("", "", initalValue, keyHandler); } /// <summary> /// Exibe a inputbox /// </summary> /// <param name="userInfo">Mensagem inicial</param> /// <param name="initalValue">Valor inicial da inputBox</param> /// <param name="keyHandler">Delegate tipo KeyPressEventHandler para capturar as teclas pressionadas</param> /// <returns>string digitada</returns> public static string Show(string userInfo, string initalValue, KeyPressEventHandler keyHandler) { return InputBox.Show("", userInfo, initalValue, keyHandler); } /// <summary> /// Exibe a inputbox /// </summary> /// <param name="Title">Título desejado</param> /// <param name="userInfo">Mensagem inicial</param> /// <param name="initalValue">Valor inicial da inputBox</param> /// <param name="keyHandler">Delegate tipo KeyPressEventHandler para capturar as teclas pressionadas</param> /// <returns>string digitada</returns> public static string Show(KeyPressEventHandler keyHandler, string Title, string userInfo) { return InputBox.Show(Title, userInfo, "", keyHandler); } /// <summary> /// Exibe a inputbox /// </summary> /// <param name="Title">Título desejado</param> /// <param name="userInfo">Mensagem inicial</param> /// <param name="initalValue">Valor inicial da inputBox</param> /// <returns>string digitada</returns> public static string Show(string Title, string userInfo, string initalValue) { return InputBox.Show(Title, userInfo, initalValue, null); } /// <summary> /// Exibe a inputbox /// </summary> /// <param name="Title">Título desejado</param> /// <param name="userInfo">Mensagem inicial</param> /// <returns>string digitada</returns> public static string Show(string Title, string userInfo) { return InputBox.Show(Title, userInfo, "", null); } /// <summary> /// Exibe a inputbox /// </summary> /// <param name="Title">Título desejado</param> /// <param name="userInfo">Mensagem inicial</param> /// <param name="initalValue">Valor inicial da inputBox</param> /// <param name="keyHandler">Delegate tipo KeyPressEventHandler para capturar as teclas pressionadas</param> /// <returns>string digitada</returns> public static string Show(string Title, string userInfo, string initalValue, KeyPressEventHandler keyHandler) { using (_InputBox input = new _InputBox()) { input.Text = string.IsNullOrEmpty(Title) ? "Infome um valor..." : Title; input.lblUserInfo.Text = userInfo; input.txtInput.Text = initalValue; if (keyHandler != null) input.keyPress = keyHandler; return input.Show(); } } #endregion } #endregion }
Exmplo de uso:
Adicione um novo projeto à sua solução do tipo Windows Forms Application
Faça referência a sua DLL.
Copiar e colar amigável: http://desenvolvedores.net.pastebin.com/raw.php?i=HqxqLyTT
/* * Exemplo de uso InputBox C# * by http://desenvolvedores.net */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace InputBoxExample { public class frmMain : Form { public frmMain() { InitializeComponent(); } private void btnComHandler_Click(object sender, EventArgs e) { KeyPressEventHandler keyPress = new KeyPressEventHandler(InputBoxKeyPress); txtTeclaPressionada.Text = ""; MessageBox.Show(InputBox.Show(keyPress, "Digite alguma coisa", "O que você digitar aqui irá aparecer na caixa de texto do formulário.")); } private void InputBoxKeyPress(object sender, KeyPressEventArgs e) { txtTeclaPressionada.Text += e.KeyChar; } private void btnApenasTestar_Click(object sender, EventArgs e) { txtApenasTestar.Text = InputBox.Show(); } private void btnValorInicial_Click(object sender, EventArgs e) { MessageBox.Show(InputBox.Show("Digite alguma coisa", "O que você digitou no textbox irá aparecer no textBox abaixo.", txtValorInicial.Text)); } #region Componentes /// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// Clean up any resources being used. /// </summary> /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.btnComHandler = new System.Windows.Forms.Button(); this.lblTeclaPressionada = new System.Windows.Forms.Label(); this.txtTeclaPressionada = new System.Windows.Forms.TextBox(); this.btnApenasTestar = new System.Windows.Forms.Button(); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.groupBox2 = new System.Windows.Forms.GroupBox(); this.label1 = new System.Windows.Forms.Label(); this.txtApenasTestar = new System.Windows.Forms.TextBox(); this.groupBox3 = new System.Windows.Forms.GroupBox(); this.label2 = new System.Windows.Forms.Label(); this.txtValorInicial = new System.Windows.Forms.TextBox(); this.btnValorInicial = new System.Windows.Forms.Button(); this.groupBox1.SuspendLayout(); this.groupBox2.SuspendLayout(); this.groupBox3.SuspendLayout(); this.SuspendLayout(); // // btnComHandler // this.btnComHandler.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.btnComHandler.Location = new System.Drawing.Point(249, 43); this.btnComHandler.Name = "btnComHandler"; this.btnComHandler.Size = new System.Drawing.Size(250, 32); this.btnComHandler.TabIndex = 2; this.btnComHandler.Text = "Testar capturando a tecla pressionada"; this.btnComHandler.UseVisualStyleBackColor = true; this.btnComHandler.Click += new System.EventHandler(this.btnComHandler_Click); // // lblTeclaPressionada // this.lblTeclaPressionada.AutoSize = true; this.lblTeclaPressionada.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.lblTeclaPressionada.Location = new System.Drawing.Point(6, 19); this.lblTeclaPressionada.Name = "lblTeclaPressionada"; this.lblTeclaPressionada.Size = new System.Drawing.Size(108, 13); this.lblTeclaPressionada.TabIndex = 0; this.lblTeclaPressionada.Text = "Teclas Pressionadas:"; // // txtTeclaPressionada // this.txtTeclaPressionada.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.txtTeclaPressionada.Location = new System.Drawing.Point(120, 17); this.txtTeclaPressionada.Name = "txtTeclaPressionada"; this.txtTeclaPressionada.Size = new System.Drawing.Size(379, 20); this.txtTeclaPressionada.TabIndex = 1; // // btnApenasTestar // this.btnApenasTestar.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.btnApenasTestar.Location = new System.Drawing.Point(249, 53); this.btnApenasTestar.Name = "btnApenasTestar"; this.btnApenasTestar.Size = new System.Drawing.Size(250, 32); this.btnApenasTestar.TabIndex = 2; this.btnApenasTestar.Text = "Apenas Testar"; this.btnApenasTestar.UseVisualStyleBackColor = true; this.btnApenasTestar.Click += new System.EventHandler(this.btnApenasTestar_Click); // // groupBox1 // this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.groupBox1.Controls.Add(this.btnComHandler); this.groupBox1.Controls.Add(this.lblTeclaPressionada); this.groupBox1.Controls.Add(this.txtTeclaPressionada); this.groupBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.groupBox1.Location = new System.Drawing.Point(12, 12); this.groupBox1.Name = "groupBox1"; this.groupBox1.Size = new System.Drawing.Size(511, 91); this.groupBox1.TabIndex = 0; this.groupBox1.TabStop = false; this.groupBox1.Text = "Capturando as Teclas"; // // groupBox2 // this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.groupBox2.Controls.Add(this.label1); this.groupBox2.Controls.Add(this.txtApenasTestar); this.groupBox2.Controls.Add(this.btnApenasTestar); this.groupBox2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.groupBox2.Location = new System.Drawing.Point(12, 129); this.groupBox2.Name = "groupBox2"; this.groupBox2.Size = new System.Drawing.Size(511, 91); this.groupBox2.TabIndex = 1; this.groupBox2.TabStop = false; this.groupBox2.Text = "Apenas Testar"; // // label1 // this.label1.AutoSize = true; this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.label1.Location = new System.Drawing.Point(6, 21); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(48, 13); this.label1.TabIndex = 0; this.label1.Text = "Retorno:"; // // txtApenasTestar // this.txtApenasTestar.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.txtApenasTestar.Location = new System.Drawing.Point(120, 19); this.txtApenasTestar.Name = "txtApenasTestar"; this.txtApenasTestar.Size = new System.Drawing.Size(379, 20); this.txtApenasTestar.TabIndex = 1; // // groupBox3 // this.groupBox3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.groupBox3.Controls.Add(this.label2); this.groupBox3.Controls.Add(this.txtValorInicial); this.groupBox3.Controls.Add(this.btnValorInicial); this.groupBox3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.groupBox3.Location = new System.Drawing.Point(12, 237); this.groupBox3.Name = "groupBox3"; this.groupBox3.Size = new System.Drawing.Size(511, 91); this.groupBox3.TabIndex = 2; this.groupBox3.TabStop = false; this.groupBox3.Text = "Valor Inicial"; // // label2 // this.label2.AutoSize = true; this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.label2.Location = new System.Drawing.Point(6, 21); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(99, 13); this.label2.TabIndex = 0; this.label2.Text = "Digite o valor Inicial"; // // txtValorInicial // this.txtValorInicial.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.txtValorInicial.Location = new System.Drawing.Point(120, 19); this.txtValorInicial.Name = "txtValorInicial"; this.txtValorInicial.Size = new System.Drawing.Size(379, 20); this.txtValorInicial.TabIndex = 1; // // btnValorInicial // this.btnValorInicial.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.btnValorInicial.Location = new System.Drawing.Point(249, 53); this.btnValorInicial.Name = "btnValorInicial"; this.btnValorInicial.Size = new System.Drawing.Size(250, 32); this.btnValorInicial.TabIndex = 2; this.btnValorInicial.Text = "Com valor inicial"; this.btnValorInicial.UseVisualStyleBackColor = true; this.btnValorInicial.Click += new System.EventHandler(this.btnValorInicial_Click); // // frmMain // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(535, 340); this.Controls.Add(this.groupBox3); this.Controls.Add(this.groupBox2); this.Controls.Add(this.groupBox1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "frmMain"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "InputBox em C#"; this.groupBox1.ResumeLayout(false); this.groupBox1.PerformLayout(); this.groupBox2.ResumeLayout(false); this.groupBox2.PerformLayout(); this.groupBox3.ResumeLayout(false); this.groupBox3.PerformLayout(); this.ResumeLayout(false); } #endregion private System.Windows.Forms.Button btnComHandler; private System.Windows.Forms.Label lblTeclaPressionada; private System.Windows.Forms.TextBox txtTeclaPressionada; private System.Windows.Forms.Button btnApenasTestar; private System.Windows.Forms.GroupBox groupBox1; private System.Windows.Forms.GroupBox groupBox2; private System.Windows.Forms.Label label1; private System.Windows.Forms.TextBox txtApenasTestar; private System.Windows.Forms.GroupBox groupBox3; private System.Windows.Forms.Label label2; private System.Windows.Forms.TextBox txtValorInicial; private System.Windows.Forms.Button btnValorInicial; #endregion } }
Para os mais preguiçosos, faça o download do exemplo completo abaixo:
[download id=”12″]
É isso ai pessoal 🙂
Até o próximo
♦ Marcelo