C#试图访问面板的位置';的父级
本文关键字:位置 访问 | 更新日期: 2023-09-27 17:59:12
我有一个主窗体,上面有一个选项卡控件。选项卡是通过添加解决方案中其他窗体的面板来填充的。其中一个面板有一些代码,会弹出一个选项窗口。我希望该窗口与主窗体的右上角对齐。要做到这一点,我需要主窗体的位置和大小。然而,我似乎无法访问任何属性来告诉其中一个面板主要窗体的位置。
我试过this.Parent
、this.ParentForm
和this.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);
}
}
}
我很困惑,您似乎在向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 调用
让我知道这是否有效。