VB.NET的InputBox的C#版本是什么?

问题描述 投票:0回答:12

VB.NET 的 C# 版本是什么

InputBox

c# vb.net
12个回答
270
投票

添加对

Microsoft.VisualBasic
的引用,
InputBox
位于
Microsoft.VisualBasic.Interaction
命名空间中:

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

只有

prompt
的第一个参数是强制性的


141
投票

动态创建对话框。您可以根据自己的喜好进行定制。

注意,除了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;
    }

用法

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

116
投票

总结一下:

  • C# 中没有
  • 您可以通过添加对 Microsoft.VisualBasic 的引用来使用 Visual Basic 中的对话框:

    1. 解决方案资源管理器中,右键单击 References 文件夹。
    2. 选择
    3. 添加参考...
    4. .NET 选项卡中(在较新的 Visual Studio 版本中 - Assembly 选项卡)- 选择 Microsoft.VisualBasic
    5. 点击
    6. 确定
然后就可以使用前面提到的代码了:

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

    编写自己的输入框。
  • 使用
  • 别人的
也就是说,我建议您首先考虑输入框的需要。对话并不总是最好的做事方式,有时弊大于利 - 但这取决于具体情况。


9
投票
没有一个。如果您确实想在 C# 中使用 VB InputBox,您也可以。只需添加对 Microsoft.VisualBasic.dll 的引用,您就会在那里找到它。

但我建议

使用它。在我看来,它既丑陋又过时。


6
投票
返回用户输入的字符串;如果点击

Cancel: 则为空字符串

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

返回

String

 作为 
ref 参数,如果点击 OK
,则返回 
true,如果点击 Cancel
,则返回 
false

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

注意:任何代码都会发布到公共领域。无需归属。


5
投票
您不仅应该将

Microsoft.VisualBasic

 添加到项目的参考列表中,还应该声明 
using Microsoft.VisualBasic;
,这样您只需使用 
Interaction.Inputbox("...")
 而不是 
Microsoft.VisualBasic.Interaction.Inputbox


4
投票
添加对

Microsoft.VisualBasic

的引用并使用此功能:

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

最后 2 个数字是显示输入对话框的 X/Y 位置。


3
投票
你是说输入框吗?只需查看 Microsoft.VisualBasic 命名空间即可。

C# 和 VB.Net 共享一个公共库。如果一种语言可以使用它,另一种语言也可以。


3
投票
不添加对 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", "メッセージ", "タイトル", "初期値");

请参阅以下内容以获取更多信息:


脚本控制
JScript 中的消息框
JScript 中的输入和 MsgBox

.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
投票
我可以通过自己编写代码来实现这一目标。我不喜欢扩展并依赖大型图书馆来获取基本的东西。

形式与设计师:

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

用途:

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

请注意,这会显示一些自动调整大小,以根据您要求显示的文本量保持美观。我也知道它缺乏花哨的功能,但对于那些面临同样困境的人来说,这是向前迈出的坚实一步。


0
投票
很多时候你不需要VB的InputBox的所有功能,你只需要询问用户确认即可。

在这种情况下,只需使用 MessageBox 即可。

示例:

const string caption = "Delete confirmation"; var result = MessageBox.Show("Sure to delete file?", caption, MessageBoxButtons.YesNo, MessageBoxIcon.Question); // If the Yes button was pressed ... if (result == DialogResult.Yes) { // Delete the file. }
    

-4
投票
没有这样的东西:我建议自己写一个,并在需要时使用它。

© www.soinside.com 2019 - 2024. All rights reserved.