C # Попытка получить доступ к местоположению родителя панели - PullRequest
2 голосов
/ 14 июня 2011

У меня есть основная форма с вкладкой. Вкладки заполняются путем добавления панелей из других форм в решении. На одной из этих панелей есть какой-то код, который открывает окно настроек Я хочу, чтобы это окно совпало с верхней правой стороной основной формы. Для этого мне нужно расположение и размер основной формы. Однако я не могу получить доступ к какому-либо свойству, которое сообщит одной из панелей, где находится эта основная форма.

Я пробовал такие вещи, как 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);
        }
    }
}

Ответы [ 3 ]

1 голос
/ 15 июня 2011

Выезд

Application.OpenForms

Это должно дать вам доступ к тому, что вы хотите.

1 голос
/ 15 июня 2011

Я запутался, вы, кажется, добавляете панель, которая принадлежит SomeApplication для Form1.Я бы посоветовал вам сделать 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;
        }
    }
}
1 голос
/ 14 июня 2011

базовый идентификатор обращается к родительскому элементу.

Две возможные проблемы: во-первых, ваши конструкторы явно не расширяют ваш базовый конструктор. это будет выглядеть так:

public Form1():base(){}

Я все еще рекомендую создавать методы получения в классе Form1. Это будет выглядеть примерно так:

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

и позвоните из WinAlignTest

Дайте мне знать, если это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...