我能否在 C# MessageBox 中添加控件?

4
4个回答

8
你可以使用位于Microsoft.VisualBasic命名空间中的Interaction.InputBox方法。
尝试一下。
 Microsoft.VisualBasic.Interaction.InputBox("Enter a Value Here", "Title", "Your Default Text",200,100);

“InputBox”这个功能自从我开始使用VB语言编程十年前就一直存在了。 - Alex Essilfie

4

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


3
如果需要使用模态对话框,请使用Form.ShowDialog()而不是Form.Show()。 - Nathan Taylor

2

创建自己的模态框或其他输入对话框并不难,您可以构建所需的可重复使用性。

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

好的,我刚刚在这个编辑器中写了所有内容,请原谅任何语法错误。
你可以像上面那样做,但稍微整理一下,添加所需的可扩展性(例如需要显示的按钮和输入等)...然后只需调用GimmeValues.GetInput(this),其中this表示一个IWin32Window...

value的结果将是所选的无意义值,您可以执行逻辑操作。

if(value.Result == DialogResult.OK && !string.IsNullOrEmpty(value.SomeInput)){
    //TODO: Place logic....
}

还有没有修改标准对话框的解决方案? - jitm
@CesarGon 哈哈哈,是的,对我来说示例名称毫无意义,我并不总是使用fu/bar/biz/baz。 - Quintin Robinson
@Quintin: :-) 嗯,我认为好的、易懂的命名非常重要,特别是当我们尝试向母语不是英语的人解释事物时。使用缩写、缩略语和其他形式的文字游戏是“最差的实践”。 - CesarGon
@CesarGon 没错,如果有人主要使用其他语言,那么以本地语言书写的无用名称就可以完美地传达,继续毫无意义。同样,只要理解概念和意图,命名也是毫无意义的(在这种情况下派生形式的名称)。 - Quintin Robinson
@CesarGon 实际上,我并不习惯将毫无意义或建设性的批评当成个人攻击,尤其是像“yuk”这样张扬的言语。我发现它很有趣,我的回复也是真诚的笑声。我认为我们已经达成共识了。=) - Quintin Robinson
显示剩余4条评论

0
你需要创建一个自定义表单来处理它。
如果你想让这个表单的行为像MessageBox一样,只需在你的表单上创建一个静态的Show()方法,创建一个实例并向用户显示该框。该静态方法也可以处理从你的自定义表单返回你感兴趣的值(很像DialogResult)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接