web-dev-qa-db-fra.com

Quelle est la version C # de VB.net Input Dialog?

Quelle est la version C # de InputBox de VB.net?

139
wusher

Ajouter une référence à Microsoft.VisualBasic, InputBox est dans le Microsoft.VisualBasic.Interaction espace de noms:

using Microsoft.VisualBasic;
string input = Interaction.InputBox("Prompt", "Title", "Default", -1, -1);
211
Ozgur Ozcitak

Résumer:

  • Il y a aucun en C # .
  • Vous pouvez utiliser la boîte de dialogue à partir de Visual Basic en ajoutant une référence à Microsoft.VisualBasic:

    1. Dans Explorateur de solutions , cliquez avec le bouton droit de la souris sur le dossier Références .
    2. Sélectionnez Ajouter une référence ...
    3. Dans l'onglet . NET (dans les versions plus récentes de Visual Studio - Assembly ) - sélectionnez Microsoft.VisualBasic
    4. Cliquez sur [~ # ~] ok [~ # ~]

Ensuite, vous pouvez utiliser le code mentionné précédemment:

string input = Microsoft.VisualBasic.Interaction.InputBox("Prompt", "Title", "Default", 0, 0);

Cela dit, je suggère que vous considériez la nécessité d'une boîte de saisie en premier lieu. Les dialogues ne sont pas toujours la meilleure façon de faire et parfois ils font plus de mal que de bien - mais cela dépend de la situation.

102
Tomas Sedovic

Création dynamique d'une boîte de dialogue. Vous pouvez personnaliser à votre goût.

Notez qu'il n'y a pas de dépendance externe ici sauf winform

private static DialogResult ShowInputDialog(ref string input)
    {
        System.Drawing.Size size = new System.Drawing.Size(200, 70);
        Form inputBox = new Form();

        inputBox.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
        inputBox.ClientSize = size;
        inputBox.Text = "Name";

        System.Windows.Forms.TextBox textBox = new TextBox();
        textBox.Size = new System.Drawing.Size(size.Width - 10, 23);
        textBox.Location = new System.Drawing.Point(5, 5);
        textBox.Text = input;
        inputBox.Controls.Add(textBox);

        Button okButton = new Button();
        okButton.DialogResult = System.Windows.Forms.DialogResult.OK;
        okButton.Name = "okButton";
        okButton.Size = new System.Drawing.Size(75, 23);
        okButton.Text = "&OK";
        okButton.Location = new System.Drawing.Point(size.Width - 80 - 80, 39);
        inputBox.Controls.Add(okButton);

        Button cancelButton = new Button();
        cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
        cancelButton.Name = "cancelButton";
        cancelButton.Size = new System.Drawing.Size(75, 23);
        cancelButton.Text = "&Cancel";
        cancelButton.Location = new System.Drawing.Point(size.Width - 80, 39);
        inputBox.Controls.Add(cancelButton);

        inputBox.AcceptButton = okButton;
        inputBox.CancelButton = cancelButton; 

        DialogResult result = inputBox.ShowDialog();
        input = textBox.Text;
        return result;
    }

usage

string input="hede";
ShowInputDialog(ref input);
95
Gorkem

Il n'y en a pas. Si vous voulez vraiment utiliser le VB InputBox en C #, vous le pouvez. Ajoutez simplement une référence à Microsoft.VisualBasic.dll et vous le trouverez ici.

Mais je suggèrerais de de ne pas l'utiliser. C'est moche et obsolète à l'OMI.

8
Ryan Farley

Non seulement vous devez ajouter Microsoft.VisualBasic à votre liste de références pour le projet, mais vous devez également déclarer 'using Microsoft.VisualBasic;' vous devez donc simplement utiliser 'Interaction.Inputbox ("...")' au lieu de Microsoft.VisualBasic.Interaction.Inputbox

5
user429460

Renvoie la chaîne saisie par l'utilisateur. chaîne vide s'ils frappent Cancel:

    public static String InputBox(String caption, String Prompt, String defaultText)
    {
        String localInputText = defaultText;
        if (InputQuery(caption, Prompt, ref localInputText))
        {
            return localInputText;
        }
        else
        {
            return "";
        }
    }

Renvoie le String sous la forme d'un paramètre ref, en renvoyant true si le résultat est atteint. OK, ou false s'ils frappent Cancel:

    public static Boolean InputQuery(String caption, String Prompt, ref String value)
    {
        Form form;
        form = new Form();
        form.AutoScaleMode = AutoScaleMode.Font;
        form.Font = SystemFonts.IconTitleFont;

        SizeF dialogUnits;
        dialogUnits = form.AutoScaleDimensions;

        form.FormBorderStyle = FormBorderStyle.FixedDialog;
        form.MinimizeBox = false;
        form.MaximizeBox = false;
        form.Text = caption;

        form.ClientSize = new Size(
                    Toolkit.MulDiv(180, dialogUnits.Width, 4),
                    Toolkit.MulDiv(63, dialogUnits.Height, 8));

        form.StartPosition = FormStartPosition.CenterScreen;

        System.Windows.Forms.Label lblPrompt;
        lblPrompt = new System.Windows.Forms.Label();
        lblPrompt.Parent = form;
        lblPrompt.AutoSize = true;
        lblPrompt.Left = Toolkit.MulDiv(8, dialogUnits.Width, 4);
        lblPrompt.Top = Toolkit.MulDiv(8, dialogUnits.Height, 8);
        lblPrompt.Text = Prompt;

        System.Windows.Forms.TextBox edInput;
        edInput = new System.Windows.Forms.TextBox();
        edInput.Parent = form;
        edInput.Left = lblPrompt.Left;
        edInput.Top = Toolkit.MulDiv(19, dialogUnits.Height, 8);
        edInput.Width = Toolkit.MulDiv(164, dialogUnits.Width, 4);
        edInput.Text = value;
        edInput.SelectAll();


        int buttonTop = Toolkit.MulDiv(41, dialogUnits.Height, 8);
        //Command buttons should be 50x14 dlus
        Size buttonSize = Toolkit.ScaleSize(new Size(50, 14), dialogUnits.Width / 4, dialogUnits.Height / 8);

        System.Windows.Forms.Button bbOk = new System.Windows.Forms.Button();
        bbOk.Parent = form;
        bbOk.Text = "OK";
        bbOk.DialogResult = DialogResult.OK;
        form.AcceptButton = bbOk;
        bbOk.Location = new Point(Toolkit.MulDiv(38, dialogUnits.Width, 4), buttonTop);
        bbOk.Size = buttonSize;

        System.Windows.Forms.Button bbCancel = new System.Windows.Forms.Button();
        bbCancel.Parent = form;
        bbCancel.Text = "Cancel";
        bbCancel.DialogResult = DialogResult.Cancel;
        form.CancelButton = bbCancel;
        bbCancel.Location = new Point(Toolkit.MulDiv(92, dialogUnits.Width, 4), buttonTop);
        bbCancel.Size = buttonSize;

        if (form.ShowDialog() == DialogResult.OK)
        {
            value = edInput.Text;
            return true;
        }
        else
        {
            return false;
        }
    }

    /// <summary>
    /// Multiplies two 32-bit values and then divides the 64-bit result by a 
    /// third 32-bit value. The final result is rounded to the nearest integer.
    /// </summary>
    public static int MulDiv(int nNumber, int nNumerator, int nDenominator)
    {
        return (int)Math.Round((float)nNumber * nNumerator / nDenominator);
    }

Note: Tout code est publié dans le domaine public. Aucune attribution requise.

5
Ian Boyd

Ajouter une référence à Microsoft.VisualBasic et utilisez cette fonction:

string response =  Microsoft.VisualBasic.Interaction.InputBox("What's 1+1?", "Title", "2", 0, 0);

Les 2 derniers chiffres sont une position X/Y pour afficher la boîte de dialogue de saisie.

4
chakrit

Vous voulez dire InputBox? Il suffit de regarder dans l'espace de noms Microsoft.VisualBasic.

C # et VB.Net partagent une bibliothèque commune. Si une langue peut l'utiliser, l'autre le peut aussi.

3
Joel Coehoorn

Sans ajouter de référence à Microsoft.VisualBasic:

// "dynamic" requires reference to Microsoft.CSharp
Type tScriptControl = Type.GetTypeFromProgID("ScriptControl");
dynamic oSC = Activator.CreateInstance(tScriptControl);

oSC.Language = "VBScript";
string sFunc = @"Function InBox(Prompt, title, default) 
InBox = InputBox(Prompt, title, default)    
End Function
";
oSC.AddCode(sFunc);
dynamic Ret = oSC.Run("InBox", "メッセージ", "タイトル", "初期値");

Voir ces pour plus d'informations:
ScriptControl
MsgBox dans JScript
Input et MsgBox dans JScript

.NET 2.0:

string sFunc = @"Function InBox(Prompt, title, default) 
InBox = InputBox(Prompt, title, default)    
End Function
";

Type tScriptControl = Type.GetTypeFromProgID("ScriptControl");
object oSC = Activator.CreateInstance(tScriptControl);

// https://github.com/mono/mono/blob/master/mcs/class/corlib/System/MonoType.cs
// System.Reflection.PropertyInfo pi = tScriptControl.GetProperty("Language", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.CreateInstance| System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.SetProperty | System.Reflection.BindingFlags.IgnoreCase);
// pi.SetValue(oSC, "VBScript", null);

tScriptControl.InvokeMember("Language", System.Reflection.BindingFlags.SetProperty, null, oSC, new object[] { "VBScript" });
tScriptControl.InvokeMember("AddCode", System.Reflection.BindingFlags.InvokeMethod, null, oSC, new object[] { sFunc });
object ret = tScriptControl.InvokeMember("Run", System.Reflection.BindingFlags.InvokeMethod, null, oSC, new object[] { "InBox", "メッセージ", "タイトル", "初期値" });
Console.WriteLine(ret);
2
Stefan Steiger

J'ai pu y parvenir en codant le mien. Je n'aime pas m'étendre dans une grande bibliothèque pour quelque chose de rudimentaire.

Forme et concepteur:

public partial class InputBox 
    : Form
{

    public String Input
    {
        get { return textInput.Text; }
    }

    public InputBox()
    {
        InitializeComponent();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        DialogResult = System.Windows.Forms.DialogResult.OK;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        DialogResult = System.Windows.Forms.DialogResult.Cancel;
    }

    private void InputBox_Load(object sender, EventArgs e)
    {
        this.ActiveControl = textInput;
    }

    public static DialogResult Show(String title, String message, String inputTitle, out String inputValue)
    {
        InputBox inputBox = null;
        DialogResult results = DialogResult.None;

        using (inputBox = new InputBox() { Text = title })
        {
            inputBox.labelMessage.Text = message;
            inputBox.splitContainer2.SplitterDistance = inputBox.labelMessage.Width;
            inputBox.labelInput.Text = inputTitle;
            inputBox.splitContainer1.SplitterDistance = inputBox.labelInput.Width;
            inputBox.Size = new Size(
                inputBox.Width,
                8 + inputBox.labelMessage.Height + inputBox.splitContainer2.SplitterWidth + inputBox.splitContainer1.Height + 8 + inputBox.button2.Height + 12 + (50));
            results = inputBox.ShowDialog();
            inputValue = inputBox.Input;
        }

        return results;
    }

    void labelInput_TextChanged(object sender, System.EventArgs e)
    {
    }

}

partial class InputBox
{
    /// <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.labelMessage = new System.Windows.Forms.Label();
        this.button1 = new System.Windows.Forms.Button();
        this.button2 = new System.Windows.Forms.Button();
        this.labelInput = new System.Windows.Forms.Label();
        this.textInput = new System.Windows.Forms.TextBox();
        this.splitContainer1 = new System.Windows.Forms.SplitContainer();
        this.splitContainer2 = new System.Windows.Forms.SplitContainer();
        ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
        this.splitContainer1.Panel1.SuspendLayout();
        this.splitContainer1.Panel2.SuspendLayout();
        this.splitContainer1.SuspendLayout();
        ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
        this.splitContainer2.Panel1.SuspendLayout();
        this.splitContainer2.Panel2.SuspendLayout();
        this.splitContainer2.SuspendLayout();
        this.SuspendLayout();
        // 
        // labelMessage
        // 
        this.labelMessage.AutoSize = true;
        this.labelMessage.Location = new System.Drawing.Point(3, 0);
        this.labelMessage.MaximumSize = new System.Drawing.Size(379, 0);
        this.labelMessage.Name = "labelMessage";
        this.labelMessage.Size = new System.Drawing.Size(50, 13);
        this.labelMessage.TabIndex = 99;
        this.labelMessage.Text = "Message";
        // 
        // button1
        // 
        this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
        this.button1.Location = new System.Drawing.Point(316, 126);
        this.button1.Name = "button1";
        this.button1.Size = new System.Drawing.Size(75, 23);
        this.button1.TabIndex = 3;
        this.button1.Text = "Cancel";
        this.button1.UseVisualStyleBackColor = true;
        this.button1.Click += new System.EventHandler(this.button1_Click);
        // 
        // button2
        // 
        this.button2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
        this.button2.Location = new System.Drawing.Point(235, 126);
        this.button2.Name = "button2";
        this.button2.Size = new System.Drawing.Size(75, 23);
        this.button2.TabIndex = 2;
        this.button2.Text = "OK";
        this.button2.UseVisualStyleBackColor = true;
        this.button2.Click += new System.EventHandler(this.button2_Click);
        // 
        // labelInput
        // 
        this.labelInput.AutoSize = true;
        this.labelInput.Location = new System.Drawing.Point(3, 6);
        this.labelInput.Name = "labelInput";
        this.labelInput.Size = new System.Drawing.Size(31, 13);
        this.labelInput.TabIndex = 99;
        this.labelInput.Text = "Input";
        this.labelInput.TextChanged += new System.EventHandler(this.labelInput_TextChanged);
        // 
        // textInput
        // 
        this.textInput.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
        | System.Windows.Forms.AnchorStyles.Right)));
        this.textInput.Location = new System.Drawing.Point(3, 3);
        this.textInput.Name = "textInput";
        this.textInput.Size = new System.Drawing.Size(243, 20);
        this.textInput.TabIndex = 1;
        // 
        // splitContainer1
        // 
        this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
        this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
        this.splitContainer1.IsSplitterFixed = true;
        this.splitContainer1.Location = new System.Drawing.Point(0, 0);
        this.splitContainer1.Name = "splitContainer1";
        // 
        // splitContainer1.Panel1
        // 
        this.splitContainer1.Panel1.Controls.Add(this.labelInput);
        // 
        // splitContainer1.Panel2
        // 
        this.splitContainer1.Panel2.Controls.Add(this.textInput);
        this.splitContainer1.Size = new System.Drawing.Size(379, 50);
        this.splitContainer1.SplitterDistance = 126;
        this.splitContainer1.TabIndex = 99;
        // 
        // splitContainer2
        // 
        this.splitContainer2.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.splitContainer2.IsSplitterFixed = true;
        this.splitContainer2.Location = new System.Drawing.Point(12, 12);
        this.splitContainer2.Name = "splitContainer2";
        this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal;
        // 
        // splitContainer2.Panel1
        // 
        this.splitContainer2.Panel1.Controls.Add(this.labelMessage);
        // 
        // splitContainer2.Panel2
        // 
        this.splitContainer2.Panel2.Controls.Add(this.splitContainer1);
        this.splitContainer2.Size = new System.Drawing.Size(379, 108);
        this.splitContainer2.SplitterDistance = 54;
        this.splitContainer2.TabIndex = 99;
        // 
        // InputBox
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(403, 161);
        this.Controls.Add(this.splitContainer2);
        this.Controls.Add(this.button2);
        this.Controls.Add(this.button1);
        this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
        this.MaximizeBox = false;
        this.MinimizeBox = false;
        this.Name = "InputBox";
        this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
        this.Text = "Title";
        this.TopMost = true;
        this.Load += new System.EventHandler(this.InputBox_Load);
        this.splitContainer1.Panel1.ResumeLayout(false);
        this.splitContainer1.Panel1.PerformLayout();
        this.splitContainer1.Panel2.ResumeLayout(false);
        this.splitContainer1.Panel2.PerformLayout();
        ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
        this.splitContainer1.ResumeLayout(false);
        this.splitContainer2.Panel1.ResumeLayout(false);
        this.splitContainer2.Panel1.PerformLayout();
        this.splitContainer2.Panel2.ResumeLayout(false);
        ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
        this.splitContainer2.ResumeLayout(false);
        this.ResumeLayout(false);

    }

    #endregion

    private System.Windows.Forms.Label labelMessage;
    private System.Windows.Forms.Button button1;
    private System.Windows.Forms.Button button2;
    private System.Windows.Forms.Label labelInput;
    private System.Windows.Forms.TextBox textInput;
    private System.Windows.Forms.SplitContainer splitContainer1;
    private System.Windows.Forms.SplitContainer splitContainer2;
}

Usage:

String output = "";

result = System.Windows.Forms.DialogResult.None;

result = InputBox.Show(
    "Input Required",
    "Please enter the value (if available) below.",
    "Value",
    out output);

if (result != System.Windows.Forms.DialogResult.OK)
{
    return;
}

Notez que cela présente un peu de dimensionnement automatique afin de le garder joli en fonction de la quantité de texte que vous lui demandez d’afficher. Je sais aussi qu'il manque les cloches et les sifflets, mais c'est un pas en avant solide pour ceux qui font face au même dilemme.

1
David Carrigan