Qual è la versione C # di InputDialog di VB.net?

Qual è la versione C # di InputDialog di VB.net?

Solutions Collecting From Web of "Qual è la versione C # di InputDialog di VB.net?"

Aggiungi un riferimento a Microsoft.VisualBasic , InputBox trova nello spazio dei nomi Microsoft.VisualBasic.Interaction :

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

Riassumendo:

  • Non ce n’è in C # .
  • È ansible utilizzare la finestra di dialogo da Visual Basic aggiungendo un riferimento a Microsoft.VisualBasic:

    1. In Esplora soluzioni , fare clic con il pulsante destro del mouse sulla cartella Riferimenti .
    2. Seleziona Aggiungi riferimento …
    3. Nella scheda .NET (nelle versioni più recenti di Visual Studio , scheda Assemblaggio ), selezionare Microsoft.VisualBasic
    4. Clicca su OK

Quindi puoi usare il codice precedentemente citato:

 string input = Microsoft.VisualBasic.Interaction.InputBox("Title", "Prompt", "Default", 0, 0); 
  • Scrivi il tuo InputBox personale.
  • Usa qualcun altro .

Detto questo, ti suggerisco di considerare la necessità di una casella di input in primo luogo. I dialoghi non sono sempre il modo migliore per fare le cose e a volte fanno più male che bene – ma ciò dipende dalla situazione particolare.

Creazione dynamic di una finestra di dialogo. Puoi personalizzare secondo i tuoi gusti.

Nota che non esiste alcuna dipendenza esterna qui tranne 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; } 

uso

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

Non ce n’è uno. Se vuoi davvero usare VB InputBox in C # puoi farlo. Basta aggiungere un riferimento a Microsoft.VisualBasic.dll e lo troverai lì.

Ma suggerirei di non usarlo. È brutto e obsoleto IMO.

Non solo dovresti aggiungere Microsoft.VisualBasic al tuo elenco di riferimento per il progetto, ma dovresti anche dichiarare ‘using Microsoft.VisualBasic;’ quindi devi solo usare ‘Interaction.Inputbox (“…”)’ invece di Microsoft.VisualBasic.Interaction.Inputbox

Restituisce la stringa inserita dall’utente; stringa vuota se colpiscono Annulla :

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

Restituisce la String come parametro ref , restituendo true se premono OK o false se toccano 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; } } ///  /// 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. ///  public static int MulDiv(int nNumber, int nNumerator, int nDenominator) { return (int)Math.Round((float)nNumber * nNumerator / nDenominator); } 

Nota : qualsiasi codice è rilasciato nel pubblico dominio. Nessuna attribuzione richiesta.

Aggiungi riferimento a Microsoft.VisualBasic e utilizza questa funzione:

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

L’ultimo 2 numero è una posizione X / Y per visualizzare la finestra di dialogo di input.

Intendi InputBox? Basta guardare nello spazio dei nomi Microsoft.VisualBasic.

C # e VB.Net condividono una libreria comune. Se una lingua può usarla, così può l’altra.

È ansible utilizzare il seguente esempio di finestra di dialogo di input di esempio: testo del collegamento

Senza aggiungere un riferimento a 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", "メッセージ", "タイトル", "初期値"); 

Vedi questi per ulteriori informazioni:
ScriptControl
MsgBox in JScript
Input e MsgBox in 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); 

Sono stato in grado di ottenere ciò codificando il mio. Non mi piace estendere e fare affidamento sulla libreria di grandi dimensioni per qualcosa di rudimentale.

Form e Designer:

 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 { ///  /// Required designer variable. ///  private System.ComponentModel.IContainer components = null; ///  /// Clean up any resources being used. ///  /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code ///  /// Required method for Designer support - do not modify /// the contents of this method with the code editor. ///  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; } 

Uso:

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

Nota che questo mostra un po ‘di dimensionamento automatico per tenerlo piuttosto basato sulla quantità di testo che chiedi alla visualizzazione. So anche che mancano le campane e i fischietti, ma è un solido passo avanti per coloro che affrontano questo stesso dilemma.

Non esiste una cosa del genere: raccomando di scriverlo da solo e usarlo quando ne hai bisogno.