0

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

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

我首先在 Windows7 中运行示例应用程序。现在,我按下了 textbox1 中的选项卡,因此调用了 PreviewLostKeyboardFocus();消息框被调用;我点击了MessageBox->“OK”按钮;消息框关闭;焦点保留在 textbox1 中。

现在,我在 Windows8 中运行的相同示例解决方案。现在,我从 textbox1 中按下了选项卡,因此 PreviewLostKeyboardFocus() 被调用;MessageBox 被调用;我点击了MessageBox->“OK”按钮;消息框关闭;再次调用了 PreviewLostKeyboardFocus();我单击了 MessageBox->“OK”按钮;消息框关闭;再次调用了 PreviewLostKeyboardFocus()。所以会发生什么,MessageBox 没有关闭。它一次又一次地到来。我无法编辑我的 textbox1。所以,我需要从任务管理器中关闭整个应用程序。

我在这里给出了我的示例应用程序代码以供参考。这可能看起来很简单。但是我们在大应用程序的更多地方使用了这个功能。因此,任何简单的解决方案都将帮助我们节省更多的支持时间。此问题在 .Net Framework 4.0 / 4.5 中创建。对于 .Net Framework 3.5,它在两个操作系统中都能正常工作

示例 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>

客服代码:

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

}

4

0 回答 0