日期:2014-05-17  浏览次数:20935 次

如何让一个窗体彻底不能获得焦点?写对话框
需求是这样的,MainWindow里点一个按钮,显示一个Window1作为对话框,并暂时屏蔽MainWindow,在对话框交互完毕后重新激活MainWindow
有人会说了,用ShowDialog就行呀。但是ShowDialog解除阻塞的条件是对话框被“关闭”——而关闭后,就不能重新弹出这个对话框了,不能重复使用。
代码1,不能重复弹出的对话框:

Window1 dialog;
public MainWindow()
{
    ...
    dialog = new Window1();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
    dialog.Owner = this;
    dialog.ShowDialog();
}

试过在按钮的点击事件里重新new一个对话框的窗体,以让它能弹出来。但不行,因为那个窗体实例是局部的,结果就是对话框一闪就消失了——大概是按钮事件结束,实例的作用域结束,被GC收集掉了?
代码2,弹出来一闪就没了

Window1 dialog;
private void button1_Click(object sender, RoutedEventArgs e)
{
    dialog = new Window1();
    dialog.Owner = this;
    dialog.ShowDialog();
}

所以想了半天,还是Show吧,用了这种代码
代码3

Window1 dialog;
public MainWindow()
{
    ...
    dialog = new Window1();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
    this.Focusable = false;
    this.IsEnabled = false;
    dialog.Owner = this;
    dialog.Show();
}
// 在Window1的代码里,禁止该窗口关闭。当对话框退出时,仅仅调用Hide,并重新把MainWindow的对应属性设回true

但是在对话框弹出时,MainWindow仍然可以被鼠标点击。Focusable设false只是阻止了鼠标用点击任务栏按钮的方式获得焦点,但是不能阻止鼠标用点击窗口的方式获得焦点……?

------解决方案--------------------
http://blog.csdn.net/wuyazhe/article/details/5642431
------解决方案--------------------
    public partial class Form1 : Form
    {
        private Form2 frm;
        public Form1()
        {
            InitializeComponent();
        }