C# - Usando o InputBox


Se você não sabia vai ficar sabendo agora...

A linguagem C# não possui nada perecido com o InputBox da linguagem Visual Basic.

Conhece o InputBox ?

Não !!!

O inputbox exibe um prompt em uma caixa de diálogo que aguarda que um texto seja informado ou um dos botões seja clicado e então retorna uma string contendo o conteúdo do TextBox.

A sintaxe da função é a seguinte:

Dim Prompt As String
Dim Titulo As String
Dim respostaPadrao As String
Dim XPos As Integer
Dim YPos As Integer
Dim valorRetornado As String

valorRetorando = InputBox(Prompt, Titulo, respostaPadrao, XPos, YPos)

Abaixo temos o código feito na linguagem VB .NET para mostrar como o InputBox funciona:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim Prompt As String = "Informe o nome "
Dim Titulo As String = "Procurar por nome"
Dim respostaPadrao As String = "Macoratti"
Dim XPos As Integer = 100
Dim
YPos As Integer = 300
Dim
valorRetornado As String

   valorRetornado = InputBox(Prompt, Titulo, respostaPadrao, XPos, YPos)
   MsgBox(
" O valor retornado foi :? " & valorRetornado)

End Sub

Este código mostra a seguinte janela InputBox:

Obs: Se o usuário clicar no botão Cancel uma string de comprimento zero será retornada

Tudo bem, que não é um controle cheio de recursos , mas em alguns casos é o mais simples de ser usado.

E como usar o inputbox na linguagem C# ?

A saída mais fácil é fazer uma referência no seu projeto a Microsoft.VisualBasic.

No menu Project selecione Add Reference e na guia .NET selecione Microsoft.VisualBasic e clique em OK;

e a seguir definir o namespace :  using Microsoft.VisualBasic;

Após isso basta usar o método Interaction.InputBox como no Visual Basic. Veja o exemplo abaixo:

private void button1_Click(object sender, EventArgs e)
{
   string valor = Interaction.InputBox("Informe o nome", "Procurar por nome", "Macoratti", 100, 200);
}

A seguir temos outro exemplo com validação da entrada pelo usuário:

Obs: Abaixo temos o código colocado no evento Click de um controle Button que irá exibir um prompt usando o inputbox

    private void button1_Click(object sender, EventArgs e)

        {

            /* usando a função VB.Net para exibir um prompt para o usuário informar a senha */

            string Prompt = "A senha é obrigatória.";

            string Titulo = "www.macoratti.net";

            string Resultado = Microsoft.VisualBasic.Interaction.InputBox(Prompt, Titulo, "*", 150, 150);

            /* defina senha apenas para testar. */

            string password = "mac";

            /* verifica se o resultado é uma string vazia o que indica que foi cancelado. */

            if (Resultado != "")

            {

                Resultado = Resultado.TrimStart();

                /* Verifica se a senha confere. */

                if (Resultado != password)

                {

                    MessageBox.Show("Senha Incorreta.");

                }

                else

                {

                    MessageBox.Show("Senha válida.");

                }

            }

        }

 

O resultado exibido será:

Mas se você não quiser usar esta solução por achar o cúmulo ter referenciar um namespace do Visual Basic no seu projeto C#, para usar uma função tão simples, pode você mesmo criar o seu InputBox.

A seguir vou dar um exemplo encontrado na web de como criar um inputbox para a linguagem C#.(existem muitas outras maneiras de fazer isso)

Apos criar o seu projeto no Visual Studio ou Visual C# 2010 Express Edition no menu Project selecione Add Class;

A seguir informe o nome do arquivo como InputBox.cs e inclua o seguinte código no arquivo que defina a classe InputBoxDialog que herda de Windows.Forms.

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

namespace System

{

/// <summary>

/// Summary description for InputBox.

///

public class InputBoxDialog : System.Windows.Forms.Form

{

#region Windows Contols and Constructor

private System.Windows.Forms.Label lblPrompt;

private System.Windows.Forms.Button btnOK;

private System.Windows.Forms.TextBox txtInput;

/// <summary>

/// Required designer variable.

///

private System.ComponentModel.Container components = null;

public InputBoxDialog()

{

//

// Required for Windows Form Designer support

//

InitializeComponent();

//

// TODO: Add any constructor code after InitializeComponent call

//

}

#endregion

#region Dispose

/// <summary>

/// Clean up any resources being used.

///

protected override void Dispose(bool disposing)

{

if (disposing)

{

if (components != null)

{

components.Dispose();

}

}

base.Dispose(disposing);

}

#endregion

#region Windows Form Designer generated code

/// <summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

///

private void InitializeComponent()

{

this.lblPrompt = new System.Windows.Forms.Label();

this.txtInput = new System.Windows.Forms.TextBox();

this.btnOK = new System.Windows.Forms.Button();

this.btnCancel = new System.Windows.Forms.Button();

this.SuspendLayout();

//

// lblPrompt

//

this.lblPrompt.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.lblPrompt.BackColor = System.Drawing.SystemColors.Control;

this.lblPrompt.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));

this.lblPrompt.Location = new System.Drawing.Point(12, 9);

this.lblPrompt.Name = "lblPrompt";

this.lblPrompt.Size = new System.Drawing.Size(302, 82);

this.lblPrompt.TabIndex = 3;

//

// txtInput

//

this.txtInput.Location = new System.Drawing.Point(8, 100);

this.txtInput.Name = "txtInput";

this.txtInput.Size = new System.Drawing.Size(379, 20);

this.txtInput.TabIndex = 0;

//

// btnOK

//

this.btnOK.Location = new System.Drawing.Point(320, 10);

this.btnOK.Name = "btnOK";

this.btnOK.Size = new System.Drawing.Size(75, 25);

this.btnOK.TabIndex = 4;

this.btnOK.Text = "&OK";

this.btnOK.UseVisualStyleBackColor = true;

this.btnOK.Click += new System.EventHandler(this.BtnOKClick);

//

// btnCancel

//

this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;

this.btnCancel.Location = new System.Drawing.Point(320, 41);

this.btnCancel.Name = "btnCancel";

this.btnCancel.Size = new System.Drawing.Size(75, 25);

this.btnCancel.TabIndex = 5;

this.btnCancel.Text = "&Cancela";

this.btnCancel.UseVisualStyleBackColor = true;

this.btnCancel.Click += new System.EventHandler(this.BtnCancelClick);

//

// InputBoxDialog

//

this.AcceptButton = this.btnOK;

this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);

this.BackColor = System.Drawing.SystemColors.Control;

this.CancelButton = this.btnCancel;

this.ClientSize = new System.Drawing.Size(398, 128);

this.Controls.Add(this.btnCancel);

this.Controls.Add(this.btnOK);

this.Controls.Add(this.txtInput);

this.Controls.Add(this.lblPrompt);

this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;

this.MaximizeBox = false;

this.MinimizeBox = false;

this.Name = "InputBoxDialog";

this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;

this.Text = "InputBox";

this.Load += new System.EventHandler(this.InputBox_Load);

this.ResumeLayout(false);

this.PerformLayout();

}

private System.Windows.Forms.Button btnCancel;

#endregion

#region Private Variables

string formCaption = string.Empty;

string formPrompt = string.Empty;

string inputResponse = string.Empty;

string defaultValue = string.Empty;

#endregion

#region Public Properties

public string FormCaption

{

get { return formCaption; }

set { formCaption = value; }

} // property FormCaption

public string FormPrompt

{

get { return formPrompt; }

set { formPrompt = value; }

} // property FormPrompt

public string InputResponse

{

get { return inputResponse; }

set { inputResponse = value; }

} // property InputResponse

public string DefaultValue

{

get { return defaultValue; }

set { defaultValue = value; }

} // property DefaultValue

#endregion

#region Form and Control Events

private void InputBox_Load(object sender, System.EventArgs e)

{

this.txtInput.Text = defaultValue;

this.lblPrompt.Text = formPrompt;

this.Text = formCaption;

this.txtInput.SelectionStart = 0;

this.txtInput.SelectionLength = this.txtInput.Text.Length;

this.txtInput.Focus();

}

#endregion

void BtnOKClick(object sender, EventArgs e)

{

InputResponse = this.txtInput.Text;

this.Close();

}

void BtnCancelClick(object sender, EventArgs e)

{

this.Close();

}

}

}

A aparência do arquivo acima será visualizada conforme a figura abaixo:

Feito isso basta usar a classe no seu projeto da seguinte forma:

Defina a função InputBox no formulário conforme o código abaixo:

public static string InputBox(string prompt, string title, string defaultValue)

{

    InputBoxDialog ib = new InputBoxDialog();

    ib.FormPrompt = prompt;

    ib.FormCaption = title;

    ib.DefaultValue = defaultValue;

    ib.ShowDialog();

    string s = ib.InputResponse;

    ib.Close();

    if (s == string.Empty)

      return "";

    else

    return s;

}

E a seguir fazer a chamada da função InputBox:

string texto = InputBox("Digite um numero","Teste de InputBox","10");

para ver a caixa de diálogo abaixo surgir:

Simples, simples assim...

Você decide.

Eu sei é apenas C# , mas eu gosto.

Referências:


José Carlos Macoratti