¿Cuál es la versión C# del InputDialog de VB.net?¿Cuál es la versión C# del InputDialog de VB.net?
Respuesta
Añadir una referencia a Microsoft.VisualBasic
, InputBox
es en el Microsoft.VisualBasic.Interaction
espacio de nombres:
string input = Microsoft.VisualBasic.Interaction.InputBox("Prompt", "Title", "Default", -1, -1);
No existe tal cosa: recomiendo que lo escriba usted mismo y lo utilice siempre que lo necesite.
¿Quiere decir InputBox? Solo busque en el espacio de nombres Microsoft.VisualBasic.
C# y VB.Net comparten una biblioteca común. Si un idioma puede usarlo, también lo hará el otro.
No hay ninguna. Si realmente quería usar el VB InputBox en C#, puede hacerlo. Simplemente agregue referencia a Microsoft.VisualBasic.dll y lo encontrará allí.
Pero yo sugeriría a no usarlo. Es IMO feo y obsoleto.
Creo que eres muy amable. ¡Es mucho más feo y obsoleto que eso! – BlackWasp
No se puede identificar el 'cancelar' de' cadena de entrada vacía' en realidad es un error de OMI. –
Agregar referencia para Microsoft.VisualBasic
y utilizar esta función:
string response = Microsoft.VisualBasic.Interaction.InputBox("What's 1+1?", "Title", "2", 0, 0);
El último 2 número es un X posición/Y para mostrar el cuadro de diálogo de entrada.
Para resumir:
- No es none in C#.
Usted puede utilizar el diálogo desde Visual Basic mediante la adición de una referencia a Microsoft.VisualBasic:
- En Explorador de soluciones haga clic derecho en los Referencias carpeta.
- Seleccione Agregar referencia ...
- En la pestaña .NET (en los nuevos verions Visual Studio - Asamblea pestaña) - seleccione Microsoft.VisualBasic
- Haga clic en OK
Luego puede usar el código mencionado anteriormente:
string input = Microsoft.VisualBasic.Interaction.InputBox("Title", "Prompt", "Default", 0, 0);
- Escribe tu propia InputBox.
- Use someone else's.
Dicho esto, le sugiero que considere la necesidad de una caja de entrada en primer lugar. Los diálogos no siempre son la mejor manera de hacer las cosas y a veces hacen más daño que bien, pero eso depende de la situación particular.
Puede usar el cuadro de diálogo de C# agregando esa referencia también. –
Los cuadros de entrada son una bendición para probar ui ... –
Sí, lo son. Pero me parece que en la mayoría de los casos son malos en el código de envío. –
Usted puede utilizar el siguiente Ejemplo de entrada de diálogo Templet encontrar aquí: link text
No sólo hay que añadir Microsoft.VisualBasic a su lista de referencias para el proyecto, sino que también debe declarar 'usando Microsoft.VisualBasic;' por lo que solo tiene que usar 'Interaction.Inputbox ("...') 'en lugar de Microsoft.VisualBasic.Interaction.Inputbox
Si solo lo está usando una vez, esto agrega confusión si el OP decide que ya no quiere el InputBox. Además, esto debería ser un comentario. – BalinKingOfMoria
Devuelve la cadena que el usuario ingresó; cadena vacía si golpean Cancelar:
public static String InputBox(String caption, String prompt, String defaultText)
{
String localInputText = defaultText;
if (InputQuery(caption, prompt, ref localInputText))
{
return localInputText;
}
else
{
return "";
}
}
Devuelve el String
como parámetro ref, volviendo true
si golpean OK, o false
si golpean Cancelar:
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);
}
Nota: Cualquier código se libera en el dominio público. No se requiere atribución.
public static int MulDiv (int number, int numerator, int denominator) { return (int) (((long) number * numerator + (denominator >> 1))/denominator); } –
¿Qué es '' Toolkit''? –
@markusL Toolkit fue mi clase que tiene una implementación de 'MulDiv'. Puedes ver el comentario de Peter para una implementación de ejemplo de 'MulDiv'. –
Creación dinámica de un cuadro de diálogo. Puede personalizar a su gusto.
cuenta que no hay dependencia externa aquí excepto WinForm uso
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);
+1, también sería bueno si aceptara las teclas ESC y ENTRAR –
OK, muy fácil, lo encontré: inputBox.AcceptButton = okButton; inputBox.CancelButton = cancelButton; –
trabajando! Mejor que la solución VB. Gracias beehorf! –
Sin añadir una referencia 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", "メッセージ", "タイトル", "初期値");
Vea éstas para su posterior información:
ScriptControl
MsgBox in JScript
Input and 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);
que fue capaz de lograr esto mediante la codificación de la mía. No me gusta extenderme y confiar en grandes bibliotecas para algo rudimentario.
Forma y diseñador:
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;
}
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 que este exhibe un poco de dimensionamiento automático para mantenerlo bonito sobre la base de la cantidad de texto que pide que mostrar. También sé que le faltan las características pero es un paso adelante sólido para aquellos que enfrentan este mismo dilema.
- 1. ¿Cuál es la versión del GIL de C#?
- 2. ¿Cuál es la versión C++ de ArrayList de Java?
- 3. ¿Cuál es la versión de C++ de Guid.NewGuid()?
- 4. ¿Qué es la versión VB.NET de este código?
- 5. ¿Cuál es la versión de D's de la función del sistema de C++?
- 6. ¿Cuál es el equivalente de C# de CType en VB.NET?
- 7. ¿Cuál es el mejor conversor de C# a VB.net?
- 8. ¿Cuál es el equivalente de VB.NET a este código C#?
- 9. ¿Cuál es la diferencia entre "Versión heredada" y "Versión estable"?
- 10. ¿Cuál es la codificación predeterminada para una cadena en VB.NET?
- 11. ¿Qué es C# 'interno' en VB.net?
- 12. ¿cuál es mi versión HAProxy?
- 13. ¿Cuál es el equivalente de VB.NET de la palabra clave predeterminada de C#?
- 14. ¿Cuál es el equivalente de VB.NET de la palabra clave "var" de C#?
- 15. ¿Cuál es la versión genérica de una Hashtable?
- 16. ¿Cuál es el equivalente de VB.NET de la palabra clave C# readonly?
- 17. ¿Cuál es la versión de Android de HTML's TextArea?
- 18. ¿Cuál es el equivalente de VB.NET de C# "es" palabra clave?
- 19. ¿Cuál es la mejor manera de usar la versión de archivo y la versión de ensamblaje?
- 20. ¿Cuál es la última versión de WebSphere MQ Client?
- 21. ¿Cuál es la versión de cron de Windows?
- 22. ¿Cuál es la consecuencia de omitir la versión del complemento Maven?
- 23. JFace/SWT: cambie las etiquetas de los botones en InputDialog
- 24. ¿Cuál es la diferencia entre la versión v2.0.50727.3053 y la v2.0.50727.3074 del .Net framework?
- 25. ¿cuál es la versión correcta de Eclipse para ColdFusion?
- 26. ¿Cuál es la versión de JScript que está en IE9?
- 27. ¿Cuál es la versión de oráculo más ligera?
- 28. ¿C es más rápido que VB.NET?
- 29. VB.NET equivalente de C# "As"
- 30. ¿Cuál es la diferencia entre Microsoft.Office.Interop. * Versión 12 y 14?
Bah ... el arma más rápida en el oeste jaja ....de todos modos, busqué la firma real en el Examinador de objetos y el aviso aparece antes del título, por lo que primero aparece "Indicar" y luego "Título" ... el último número 2 son coordenadas X/Y para mostrar la casilla de entrada – chakrit
¿Qué sucede si quiero obtener la contraseña? ¿Del usuario? – hims056
@ hims056 'InputBox' no admite de forma nativa la entrada enmascarada. Necesitará rodar su propio formulario de entrada. –