我看到这个函数有个重载 要传一个IWin32Window 类型的参数,
但是 IWin32Window 是一个接口,我只知道接口是用来继承的,想不通怎么当参数来传看网上基本都是 直接这样写
ShowDialog(this);请问传过去这个this有什么用处,
ShowDialog(this);和ShowDialog(); 有啥区别?

解决方案 »

  1.   

    ShowDialog(this)是把整个窗体当参数传了过去吧,也就是说可以在打开的模板窗口里对父窗口进行操作
      

  2.   

    不行啊,我在父窗体里自己定义的一些public 的成员 ,在子窗体里都看不到啊
    我在模板窗口里这样写 owner.name="123"; 回头看父窗体的name也没变 
      

  3.   

    本帖最后由 jiangsheng 于 2013-08-02 09:16:19 编辑
      

  4.   

    C# .NET 板块 没错啊
      

  5.   

    没人知道吗 ,传这个this有什么用啊
      

  6.   

    类似  Owner的意思Form f = new Form();
    f.Owner = this; // f的所有者为this接口可以做参数   不然多态哪里来  只要实现了该接口的类型都可以作为参数传进去ShowDialog()带参数的用法 请看 http://www.cnblogs.com/xiaozhi_5638/archive/2012/12/21/2828376.htmlusing(OpenFileDialog of = new OpenFileDialog())
    {
         of.ShowDialog(new MyForm()); //显示of对话框的时候  MyForm会接收一个WM_ACTIVATE消息  你可以通过m.LParam获取of的句柄  通常用这个方法来获取Model对话框的Handle  用作其他用途  其余方法一般很难获得Model对话框的Handle的
         // ...
    }class MyForm:Form
    {
            protected override void WndProc(ref Message m)
            {
                if (m.Msg == (int) Msg.WM_ACTIVATE)
                {
                    // m.LParam为要打开的窗口句柄,开始监听OpenFileDialog的Windows消息
                }
                base.WndProc(ref m);
            }
    }
      

  7.   

    我们经常需要在代码中获得某一个窗体(Form)的Handle,有了Handle,我们可以监听它的一些消息、或者给它发送一些消息。如果它为非模式对话框,很好取得Handle,比如:
    Form f = new Form();
    f.Show();
    f.Handle; // 即可以获取f的Handle,然后使用它但是,如果是一个模式对话框,也就是当它显示之后,当前线程上下文就会失去代码运行的控制权,你是无法获得它的Handle的,比如:
    Form f = new Form();
    f.ShowDialog();
    f.Handle; //执行此句的时候,f.Handle已经无效
    这个时候,如果想要获得Model对话框f的Handle,就需要使用#7 的方法,也就是ShowDialog(IWin32Window owner);给出的参考网址中,利用OpenFileDialog(IWin32Window owner)这个方法,可以获取打开文件对话框的Handle,然后给它分配一个NativeWindow,监控文件对话框的Windows消息,在正确的时候,更改系统自带文件打开对话框的样式。