我看到这个函数有个重载 要传一个IWin32Window 类型的参数,
但是 IWin32Window 是一个接口,我只知道接口是用来继承的,想不通怎么当参数来传看网上基本都是 直接这样写
ShowDialog(this);请问传过去这个this有什么用处,
ShowDialog(this);和ShowDialog(); 有啥区别?
但是 IWin32Window 是一个接口,我只知道接口是用来继承的,想不通怎么当参数来传看网上基本都是 直接这样写
ShowDialog(this);请问传过去这个this有什么用处,
ShowDialog(this);和ShowDialog(); 有啥区别?
我在模板窗口里这样写 owner.name="123"; 回头看父窗体的name也没变
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);
}
}
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消息,在正确的时候,更改系统自带文件打开对话框的样式。