C#试图访问面板的位置';的父级

本文关键字:位置 访问 | 更新日期: 2023-09-27 17:59:12

我有一个主窗体,上面有一个选项卡控件。选项卡是通过添加解决方案中其他窗体的面板来填充的。其中一个面板有一些代码,会弹出一个选项窗口。我希望该窗口与主窗体的右上角对齐。要做到这一点,我需要主窗体的位置和大小。然而,我似乎无法访问任何属性来告诉其中一个面板主要窗体的位置。

我试过this.Parentthis.ParentFormthis.GetContainerControl()。它们都返回null

有什么想法吗?

附录

//Code for the main form:
namespace WinAlignTest {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
            tabControl1.TabPages[0].Controls.Add(new SomeApplication().panel1);
        }
    }
}

//Code that shows the option window
namespace WinAlignTest {
    public partial class SomeApplication : Form {
        private ApplicationOptions Options;
        public SomeApplication() {
            InitializeComponent();
            Options = new ApplicationOptions();
        }
        private void button1_Click(object sender, EventArgs e) {
            Options.Show();
            //This will always move the location to {0,0}
            Options.Location = new Point(base.Location.X,base.Location.Y);
        }
    }
}

C#试图访问面板的位置';的父级

我很困惑,您似乎在向Form1添加一个属于SomeApplication的面板。我建议你把SomeApplication变成一个UserControl,而不是一个表单:

//Code for the main form:
namespace WinAlignTest {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
            tabControl1.TabPages[0].Controls.Add(new SomeApplication());
        }
    }
}
//Code that shows the option window
namespace WinAlignTest {
    public partial class SomeApplication : UserControl {
        private ApplicationOptions Options;
        public SomeApplication() {
            InitializeComponent();
            Options = new ApplicationOptions();
        }
        private void button1_Click(object sender, EventArgs e) {
            Options.Show();
            // You might need to use PointToScreen here
            Options.Location = this.Location;
        }
    }
}

查看

Application.OpenForms

这应该会让你获得你想要的东西。

基标识符访问父元素。

两个可能的问题:首先,构造函数没有显式扩展基构造函数。它看起来是这样的:

public Form1():base(){}

我仍然建议在Form1类中创建getter方法。它看起来像这样:

public int Form1Location
{
   get{return /*FormLocation*/}
}

并从WinAlignTest 调用

让我知道这是否有效。