全部。 我已经制作了一个通用的静态方法,可以通过其他形式使用。 现在我想返回那个消息框结果我怎么样?
我使用的代码为: -
public static DialogResult ShowMessage(Form Parent, string Text, string Caption, MessageBoxButtons Buttons, MessageBoxIcon Icon, MessageBoxDefaultButton DefaultButton)
{
if (Parent != null && Parent.InvokeRequired)
return (DialogResult) Parent.Invoke((Action)(() => MessageBox.Show(Text, Caption, Buttons, Icon, DefaultButton)));
else
return (MessageBox.Show(Text, Caption, Buttons, Icon, DefaultButton));
}
它使用简单的消息框抛出对象引用错误(例如,Ok消息)。 显示消息后显示空引用。
答案 0 :(得分:2)
Action
没有返回值,您应该使用Func
代替:
return (DialogResult) Parent.Invoke(new Func<DialogResult>(() =>
{ return MessageBox.Show(Text, Caption, Buttons, Icon, DefaultButton); }));
顺便说一句,如果您不想重复两次相同的代码(MessageBox.Show(...)
),可以通过以下方式使用代理:
delegate DialogResult MyInvoke(Form Parent, string Text, string Caption, MessageBoxButtons Buttons, MessageBoxIcon Icon, MessageBoxDefaultButton DefaultButton);
public static DialogResult ShowMessage(Form Parent, string Text, string Caption, MessageBoxButtons Buttons, MessageBoxIcon Icon, MessageBoxDefaultButton DefaultButton)
{
if (Parent.InvokeRequired){
return (DialogResult)Parent.Invoke(new MyInvoke(ShowMessage), Parent, Text, Caption, Buttons, Icon, DefaultButton);
}
return MessageBox.Show(Text, Caption, Buttons, Icon, DefaultButton);
}