C#窗体之间的拥有者

发布时间 2023-08-21 21:47:39作者: 多见多闻

WPF-WindowInteropHelper 

WindowInteropHelper windowInteropHelper = new WindowInteropHelper(this);
windowInteropHelper.Owner = new WindowInteropHelper(this.win)
{
   Owner = IntPtr.Zero
}.Handle;

这段代码在使用 WindowInteropHelper 类设置窗口的拥有者时进行了一些操作。让我详细解释一下每一行代码的含义:

WindowInteropHelper windowInteropHelper = new WindowInteropHelper(this);

创建一个名为 windowInteropHelper 的 WindowInteropHelper 对象,并将当前窗口(this)作为参数传递给构造函数。这样可以获取到当前窗口的相关信息。

windowInteropHelper.Owner = new WindowInteropHelper(this.win)
{
    Owner = IntPtr.Zero
}.Handle;
创建了一个新的 WindowInteropHelper 对象,并将另一个窗口 this.win 作为参数传递给构造函数。然后使用对象初始化器将 Owner 属性设置为 IntPtr.Zero,表示该窗口没有拥有者。
 
最后,使用 Handle 属性将新窗口的句柄赋值给 windowInteropHelper 对象的 Owner 属性。这样就将当前窗口的拥有者设置为新窗口。
 
需要注意的是,代码中的 this.win 可能是一个其他窗口对象,具体情况取决于你的代码实现。此外,WindowInteropHelper 类主要用于在 WPF 应用程序中实现与 Win32 窗口的互操作,代码中使用此类可能需要结合其他 WPF 相关的内容进行使用。

WinForms 

在 WinForms 程序中,可以使用 System.Windows.Forms.Control 类的 Handle 属性来设置窗口的拥有者。这个属性表示控件的句柄,通过设置拥有者的句柄,可以将一个窗口设置为另一个窗口的拥有者。
 
下面是一个示例代码,演示如何在 WinForms 应用程序中设置窗口的拥有者:
using System;
using System.Windows.Forms;

namespace WinFormsApp
{
    public partial class MainForm : Form
    {
        private void SetOwnerForm()
        {
            // 创建一个新的窗体作为拥有者
            Form ownerForm = new Form();
            
            // 设置拥有者窗体的属性(标题、大小等)
            ownerForm.Text = "Owner Form";
            ownerForm.Size = new System.Drawing.Size(400, 300);
            ownerForm.StartPosition = FormStartPosition.CenterScreen;
            
            // 显示拥有者窗体
            ownerForm.Show();
            
            // 将当前窗体设置为拥有者窗体的拥有者
            this.Owner = ownerForm;
        }
        
        // 在需要设置拥有者的地方调用 SetOwnerForm 方法
        // 例如在按钮的点击事件或窗体的加载事件中进行设置
    }
}
在这个示例中,我们创建了一个新的窗体对象 ownerForm,并设置该窗体的属性。然后,通过将 this.Owner 属性设置为 ownerForm,将当前窗体设置为 ownerForm 的拥有者。
 
需要注意的是,窗体间设置拥有者需要满足一定的条件,例如拥有者窗体必须已经显示,且不可隐藏等。因此,在使用窗口拥有者功能时,请根据具体需求进行相应的调整和处理。
 
在示例代码中,this.Owner = ownerForm; 这行代码表示将当前窗体 this 设置为 ownerForm 的拥有者。
 
换句话说,当前窗体 this 拥有了 ownerForm 窗体。拥有者窗体通常用于指定一个模态窗口的拥有者,拥有者窗体会在模态窗口打开时保持激活状态,并且模态窗口关闭后才能操作拥有者窗体。
 
所以,在这里,this(当前窗体)拥有了 ownerForm(拥有者窗体)。