自定义 Windows InputBox





5.00/5 (5投票s)
一个自定义的 Windows 输入对话框,
引言
C# 与 Visual Basic 不同,没有 InputBox
类。如果您的应用程序需要一个 InputBox
来捕获用户输入,您可以将引用添加到 Microsoft.VisualBasic.dll 中,并在以下命名空间中使用 static InputBox
方法:Microsoft.VisualBasic.Interaction.InputBox()
。但是,如果您想要一个自定义解决方案,您可以轻松地通过继承 System.Windows.Forms.Form
类来创建它。本文介绍了一个简单的 InputDialog
类,您可以使用它来捕获用户输入。虽然该类不能以编程方式进行自定义,但您可以很容易地在代码中进行必要的更改以满足您的需求。
我开发自定义 InputDialog
的主要原因是我想在用户输入文本长度超过输入 textbox
的 width
时扩展 textbox
。这将允许用户看到他们输入更多的文本。请参阅下面的图片。
单行文本框
多行文本框
InputDialog
的开发相对容易。我创建了一个 InputDialog
类并继承了 System.Windows.Forms.Form
类。类构造函数被设为 private
,因此无法创建类的实例。但是,即使构造函数是 private
,您仍然可以在类本身内部创建类的实例。这意味着我可以在类构造函数中创建所有需要在 InputDialog
上显示的控件,然后在 public static Show()
方法中创建类的实例。InputDialog
的实例显示为一个对话框。这很重要,因为将表单作为对话框显示会阻塞主 UI。这是必要的,因为 static Show()
方法返回一个 string
(用户的输入),由于这不会立即完成,我们需要通过将 InputDialog
显示为对话框来阻塞主 UI。只有当用户单击 确定 或 取消 按钮时,static Show()
方法才会返回用户输入。这用代码示例可以更好地解释。
public static string Show(string message)
{
InputDialog dialog = new InputDialog();
dialog.lblMessage.Text = message;
dialog.ShowDialog();
return dialog._txtInput;
}
上面的代码示例中的 ShowDialog()
方法将阻止 return
语句执行。当对话框实例被释放时,代码的执行将继续,并将用户数据返回到调用方法。
textbox
的扩展是通过向 textbox
添加 KeyDown
事件来实现的。当用户输入的长度大于预先确定的长度时,textbox
将在高度上扩展以显示更多文本。其余代码处理 UI 效果,例如添加表单阴影并将 textbox
包装在面板中以赋予它边框。
下面的最终代码示例显示了如何使用该类
string input = InputDialog.Show("Please enter your name");
MessageBox.Show(input);
虽然该类不是很详细,但可以用作模板。
历史
- 2014 年 10 月 24 日:初始版本