Reputation: 449
I have a main form with a tab control on it. The tabs get populated by adding panels from other forms within the solution. One of these panels has some code that will pop up an options window. I want that window to align itself to the top right hand side of the main form. To do this I need the location and size of the main form. However, I cannot seem to access any property that will tell one of the panels what the location of that main form is.
I've tried things like this.Parent
, this.ParentForm
and this.GetContainerControl()
. They all return null
.
Any ideas?
Addendum
//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);
}
}
}
Upvotes: 2
Views: 1236
Reputation: 8015
I'm confused, you seem to be adding a panel which belongs to SomeApplication to Form1. I would suggest you actually make SomeApplication a UserControl instead of a form:
//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;
}
}
}
Upvotes: 1
Reputation: 281
the base identifier accesses a parent element.
Two possible problems: First, your constructors don't explicitly extend your base constructor. it would look like this:
public Form1():base(){}
I still recommend making getter methods in the Form1 class. It would look something like this:
public int Form1Location
{
get{return /*FormLocation*/}
}
and call it from WinAlignTest
Let me know if this works.
Upvotes: 1
Reputation: 1483
Check out
Application.OpenForms
That should give you access to what you want.
Upvotes: 1