什么是VB.net的InputDialog的C#版本?

什么是VB.net的InputDialog的C#版本?

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

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

把它们加起来:

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

    1. 解决scheme资源pipe理器中,右键单击References文件夹。
    2. select添加引用…
    3. .NET选项卡(在较新的Visual Studio版本中 – assembly选项卡) – selectMicrosoft.VisualBasic
    4. 点击确定

那么你可以使用前面提到的代码:

 string input = Microsoft.VisualBasic.Interaction.InputBox("Title", "Prompt", "Default", 0, 0); 
  • 编写你自己的InputBox。
  • 使用别人的 。

这就是说,我build议你首先考虑一下input框的需要。 对话并不总是最好的办法,有时他们做的不是好事 – 但这取决于特定的情况。

dynamic创build一个对话框。 你可以定制你的口味。

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

没有一个。 如果你真的想在C#中使用VBinput框,你可以。 只需添加对Microsoft.VisualBasic.dll的引用,你会发现它。

但我会build议不要使用它。 这是丑陋的和过时的国际海事组织。

您不仅应该将Microsoft.VisualBasic添加到项目的参考列表中,还应该声明“使用Microsoft.VisualBasic”。 所以你只需要使用“Interaction.Inputbox(”…“)”而不是Microsoft.VisualBasic.Interaction.Inputbox

添加对Microsoft.VisualBasic引用并使用此函数:

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

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

你的意思是InputBox? 只要看看Microsoft.VisualBasic命名空间。

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

返回用户input的string; 空串如果他们击中取消

  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参数,如果他们点击确定返回true ,如果他们点击取消则返回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; } } 

除了帮手MulDiv函数,这是比你想象的更易于编写的代码在那里。

注意 :任何代码都被释放到公共领域。 不需要归属

您可以使用下面的样本input对话框样式: 链接文本

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

请参阅这些了解更多信息:
ScriptControl的
在JScript中的MsgBox
在JScript中input和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); 

我能够通过自己的编码来实现这一点。 我不喜欢延伸到依靠大型图书馆来获得一些基本的东西。

forms和devise师:

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

请注意,这显示了一些自动resize,以保持它漂亮的基础上,你问它显示多less文字。 我也知道这是缺乏花里胡哨的,但是对于面临同样困境的人来说,这是一个坚实的进步。

没有这样的事情:我build议自己写,并在需要时使用它。