.NetVersion 4.0 / 4.5中的System.Windows.Forms.MessageBox在windows7和windows8操作系统中表现不同

时间:2013-08-01 07:57:03

标签: .net wpf windows-8 compatibility

从技术上讲, 我们在我们的应用程序中使用System.Windows.Forms.MessageBox。这在Windows7和Windows8操作系统中表现不同。

实际上, 我通过一个简单的示例应用程序重新创建了该问题。 我创建了一个示例应用程序,当(TextBox)textBox1 PreviewLostKeyboardFocus()发生时,它将启动MessageBox。

我首先在Windows7中运行了示例应用程序。现在,我从textbox1按下了tab,所以,PreviewLostKeyboardFocus()被调用; MessageBox调用;我点击了MessageBox->“确定”按钮; MessageBox关闭;焦点保留在textbox1中。

现在,我在Windows8中运行了相同的示例解决方案。现在,我从textbox1中按Tab键,调用PreviewLostKeyboardFocus();调用MessageBox;我点击了MessageBox->“确定”按钮; MessageBox关闭;再一次 PreviewLostKeyboardFocus()已被调用;我点击了MessageBox->“确定”按钮; MessageBox关闭;同样调用了PreviewLostKeyboardFocus()。 所以会发生什么,MessageBox没有关闭。它一次又一次地来。 我无法编辑我的textbox1。 所以,我需要从任务管理器关闭整个应用程序。

我在这里提供了示例应用程序代码以供参考。这似乎是一个简单的问题。但我们在Big Application中的更多地方使用此功能。因此,任何简单的解决方案都将帮助我们节省更多时间。 此问题在.Net Framework 4.0 / 4.5中创建。对于.Net Framework 3.5,它在OS的

中都可以正常工作

示例WPF应用程序:

XAML代码:

<Window x:Class="wpf_forms_msg_box.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <TextBox x:Name="txt1" Width="200" Height="35" Margin="40,37,277,247" TabIndex="0" 
     PreviewLostKeyboardFocus="txt1_PreviewLostKeyboardFocus_1" Text="Press Tab"/>
    <TextBox x:Name="txt2" Width="200" Height="35" Margin="40,89,277,195" TabIndex="1"/>
    <Button x:Name="btn1" Content="Button1" Width="200" Height="35" Margin="40,144,277,140" TabIndex="2"/>
</Grid>

CS代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace wpf_forms_msg_box
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        txt1.Focus();
    }

    private void txt1_PreviewLostKeyboardFocus_1(object sender, KeyboardFocusChangedEventArgs e)
    {
        try
        {
            System.Windows.MessageBox.Show("1");
            System.Windows.Forms.MessageBox.Show("1");
            System.Windows.Forms.MessageBox.Show("2");
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
}

}

0 个答案:

没有答案