如何让一个窗体彻底不能获得焦点?写对话框

cfvmario 2013-09-10 05:53:54
需求是这样的,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只是阻止了鼠标用点击任务栏按钮的方式获得焦点,但是不能阻止鼠标用点击窗口的方式获得焦点……?
...全文
311 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cfvmario 2013-09-11
  • 打赏
  • 举报
回复
引用 6 楼 qyj2009 的回复:
ShowDialog()不就是给这种情况用的么
搞定了。以前以为ShowDialog只有当对话框被Close时才能回到主窗口,Hide不行,刚才发现Hide也行,那这问题就毫无意义了。。
水目 2013-09-11
  • 打赏
  • 举报
回复
ShowDialog()不就是给这种情况用的么
tcmakebest 2013-09-11
  • 打赏
  • 举报
回复
楼主被什么蒙住了眼睛啊,模式对话框这么经典的用法。

Window1 dialog = new Window1();
dialog.ShowDialog(this);
夜轻风 2013-09-11
  • 打赏
  • 举报
回复
    public partial class Form1 : Form
    {
        private Form2 frm;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            frm.ShowDialog();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
             frm = new Form2();
        }

        
    }


    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Hide();
        }
    }
这样是可以重复调用啊
cfvmario 2013-09-11
  • 打赏
  • 举报
回复
好吧我多虑了,ShowDialog貌似能行。一楼的链接是关闭主窗体吧,跟我需求也不一样
leeya66 2013-09-11
  • 打赏
  • 举报
回复
sleep 对不对? 我第一反应是这个
threenewbee 2013-09-10
  • 打赏
  • 举报
回复
http://blog.csdn.net/wuyazhe/article/details/5642431

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧