【发布时间】:2010-10-08 16:40:36
【问题描述】:
我是否可以在标准消息框中添加一些自定义控件以读取输入值,例如用户名和密码的文本字段,或者我应该创建带有“确定,取消”按钮和文本字段的自定义 winform?
相关:Which control to use for quick text input (inputbox)?
【问题讨论】:
标签: c# .net winforms messagebox
我是否可以在标准消息框中添加一些自定义控件以读取输入值,例如用户名和密码的文本字段,或者我应该创建带有“确定,取消”按钮和文本字段的自定义 winform?
【问题讨论】:
标签: c# .net winforms messagebox
您可以使用位于 Microsoft.VisualBasic 命名空间中的 Interaction.InputBox 方法
试试这个
Microsoft.VisualBasic.Interaction.InputBox("Enter a Value Here", "Title", "Your Default Text",200,100);
【讨论】:
您需要创建一个自定义 WinForm 来执行此操作。您可以通过在 Show 方法上返回 DialogResult 来使其工作方式与 MessageBox 相同。
【讨论】:
创建你自己的。
创建自定义模式(或其他)输入对话框并不难,您可以构建重复使用所需的可扩展性。
public class ValueHolder {
public string SomeInput { get; set; }
public DialogResult Result { get; set; }
}
public class GimmeValues : Form {
//... HAS A TEXTBOX and Okay Buttons...
private GimmeValues() {
okButton.DialogResult = DialogResult.OK;
cancelButton.DialogResult = DialogResult.Cancel;
// ... other stuff
}
public static ValueHolder GetInput(IWin32Window owner) {
using (GimmeValues values = new GimmeValues()) {
DialogResult result = values.ShowDialog(owner);
return new ValueHolder {
SomeInput = values.Textbox1.Text,
Result = result
};
}
}
}
好的,我只是在这个编辑器中写了所有内容,所以请原谅任何语法错误。
你可以做类似上面的事情,但稍微清理一下,添加你需要的可扩展性(在按钮和显示你需要的输入等方面)......然后就像ValueHolder value = GimmeValues.GetInput(this);一样调用它,其中this代表一个IWin32Window...
value 的结果值将是选定的废话,您可以执行您的逻辑..
if(value.Result == DialogResult.OK && !string.IsNullOrEmpty(value.SomeInput)){
//TODO: Place logic....
}
【讨论】:
您必须创建一个自定义表单来处理它。
如果您希望表单的行为类似于 MessageBox,只需在您的表单上创建一个静态 Show() 方法,该方法会创建一个实例并向用户显示该框。该静态方法还可以处理从自定义表单返回您感兴趣的值(很像 DialogResult)。
【讨论】: