我在现有应用程序中有一堆消息框,既有用户的简单信息,也有问题。
我想“拦截”它们(肯定不是正确的IT措辞),自动更改其内容,然后通常将其显示给用户。 应该将“OK”或其他标准返回值返回/转发到初始消息框。
修改功能是一种翻译,但为了演示,我们可以说这个特殊功能对内容做+ =“AAA”,对顶部标题做+ =“BBB”。
注1:在搜索时,我看到了几个自定义消息框,但是 这些是附加控件,主要用于更改按钮标题 或风格,而不是“拦截”。请更正。
注意2:完全同意更好的&更清洁的MVVM结构可以避免 上面需要的技巧,但这个大应用程序开始前一段时间了 非常小而且目标不同
答案 0 :(得分:1)
据我所知,这是不可能的。您不能引用MessageBox,因此一旦打开它就无法以任何方式访问它。
您无法创建MessageBox类的新实例。要显示消息框,请调用静态方法MessageBox.Show。
这意味着您不能执行以下操作:
MessageBox.Show();
MS故意使该类的构造函数或构造函数为private(或protected),以使您使用工厂方法(var box = MessageBox.Show([stuff]);
)。请注意,由于它们是显式定义的,只是不可访问,这意味着也不会生成隐式构造函数。
这样做也不会起作用:
Show
$image = '<img src="data:image/jpeg;base64,'.base64_encode($data['photo1']).'" height="100" width="100"/>';
$var = "<div>".$image."</div>";
echo $var;
方法不会返回对打开框本身的引用,但会在关闭后返回DialogResult对象。
至于你的情况,我能想到解决你的问题的唯一方法是要么通过程序并更改字符串,要么创建一个新的自定义控件并完全抛弃MessageBox。你可能能够找到另一种方式,但是&#34;拦截&#34;消息框实例是不可能的。
答案 1 :(得分:0)
假设代码使用带有text和caption参数的System.Windows.MessageBox.Show调用,您可以尝试在应用程序的公共命名空间中定义公共静态MessageBox类,提供类似的Show方法来更新参数并调用原始的MessageBox.Show方法,例如:
public static class MessageBox
{
public static void Show(string text, string caption)
{
text += "AAA";
caption += "BBB";
System.Windows.MessageBox.Show(text, caption);
}
}
注意:这只有在您能够从源代码重建解决方案时才有效,因为它需要添加新的源代码文件(自定义MessageBox类),然后重建解决方案。