【问题标题】:Can I add controls to the C# MessageBox?我可以向 C# MessageBox 添加控件吗?
【发布时间】:2010-10-08 16:40:36
【问题描述】:

我是否可以在标准消息框中添加一些自定义控件以读取输入值,例如用户名和密码的文本字段,或者我应该创建带有“确定,取消”按钮和文本字段的自定义 winform?

相关:Which control to use for quick text input (inputbox)?

【问题讨论】:

    标签: c# .net winforms messagebox


    【解决方案1】:

    您可以使用位于 Microsoft.VisualBasic 命名空间中的 Interaction.InputBox 方法

    试试这个

     Microsoft.VisualBasic.Interaction.InputBox("Enter a Value Here", "Title", "Your Default Text",200,100);
    

    【讨论】:

    • +1。自从我大约 10 年前开始使用 VB 编程以来,InputBox 的“功能”就一直存在于该语言中。
    【解决方案2】:

    您需要创建一个自定义 WinForm 来执行此操作。您可以通过在 Show 方法上返回 DialogResult 来使其工作方式与 MessageBox 相同。

    【讨论】:

    • 如果您需要模态对话框,请使用 Form.ShowDialog() 而不是 Form.Show()。
    【解决方案3】:

    创建你自己的。

    创建自定义模式(或其他)输入对话框并不难,您可以构建重复使用所需的可扩展性。

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

    【讨论】:

    • 还有没有修改标准对话框的解决方案?
    • @CesarGon HAHAHA,是的,示例名称对我来说毫无意义,我只是不总是使用 fu/bar/biz/baz。
    • @Quintin: :-) 嗯,我认为好的、易于理解的名字很重要,尤其是在试图向母语可能不是英语的人解释事物时。使用缩写、缩写和其他形式的文字游戏是“最糟糕的做法”。
    • @CesarGon 确切地说,所以如果某人主要是另一种语言,那么用母语编写的已经无用的名字可以完美地传达,继续毫无意义。同样,只要理解概念和意图,命名就没有意义(在这种情况下是派生形式名称)。
    • @CesarGon ?..我不明白,你在翻白眼做什么?
    【解决方案4】:

    您必须创建一个自定义表单来处理它。

    如果您希望表单的行为类似于 MessageBox,只需在您的表单上创建一个静态 Show() 方法,该方法会创建一个实例并向用户显示该框。该静态方法还可以处理从自定义表单返回您感兴趣的值(很像 DialogResult)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-29
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 1970-01-01
      • 2020-01-21
      • 2012-04-15
      相关资源
      最近更新 更多