MessageBox(es)存在问题

5

我正在使用C#/WPF程序时遇到MessageBox的奇怪行为。

创建一个基本的WPF应用程序,在其上放置一些标签和按钮。

这里是按钮单击事件的代码:

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        MessageBoxResult result;
        do
        {

            result = MessageBox.Show(this, "Please Click here under", "TestBugMessageBox", MessageBoxButton.OKCancel, MessageBoxImage.Information, MessageBoxResult.None);
            if (result.Equals(MessageBoxResult.OK))
            {
                result = MessageBox.Show(this, "Is it the first time you see it ?", "TestBugMessageBox", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.None);
            }
        } while (result.Equals(MessageBoxResult.Yes));
    }

将窗口放置在屏幕中央(以便MessageBox覆盖一些标签)

点击三次“是”,最后一次点击“否”,您将看到问题(希望如此):

消息框仍然显示在应用程序上。

您能告诉我它有什么问题吗?


我实际上已经启动了Visual Studio来编译这个程序,但是我无法确定问题出在哪里。所以看起来你需要告诉我们。任何点击的组合都不能使其停留在屏幕上。 - Cody Gray
2
很可能你的问题是环境相关的 - 可能与显卡、.NET版本、Windows版本或Windows配置有关。你需要发布更多关于实际问题的信息,因为它对其他人都有效。 - Greg Sansom
我确实正在使用多显示器系统,但我只使用一个。我尝试了使用取消值和没有值,但效果相同。 - Spo
@Spo,你尝试过用.Equals方法替换==运算符吗? - Anonymous Type
好的,在我们继续之前,你缺少一些信息。 例如,你是否使用多个显示器?我注意到你正在使用MessageBoxResult.None,你尝试过其他值吗?你尝试过使用.ShowDialog()方法进行模态操作吗?如果是,结果有不同吗?更新: 在XP上使用.NET 3.5是否会重现此问题?即,它是否可以隔离到WPF .Net 4,还是所有版本的WPF都会出现这种情况?你能在一个winforms项目中重现吗? - Anonymous Type
显示剩余13条评论
2个回答

1

你正在调试并停留在 do..while 循环的断点上吗? 如果答案是“是”,那么你必须删除断点:如果你锁定主线程上的循环,WPF 就无法重新绘制窗口的表面。

编辑: 即使在调试和断点 do..while 的情况下,我也无法重现所描述的行为。 我所谈论的问题只出现在停止 UI 线程时(例如,在覆盖 Measure || Arrange 方法并调试它们时),而不是主线程。抱歉。


0

我刚在Windows 7 64位多显示器系统中,在Visual Studio 2010下使用.NET 4.0 C#/WPF尝试了一下,对我来说运行得很好。

唯一的区别是我的MessageBox.Show不需要传入'this'对象。

你是否在使用System.Windows.MessageBox?

也许只需要进行Windows更新和/或重新安装.NET框架。


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