Держать одно окно перед другим - PullRequest
1 голос
/ 13 ноября 2009

Я пишу UserControl, который будет действовать как выпадающий список, в основном текстовое поле со списком, который появляется под ним ...

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

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

Есть ли другой способ сделать это? Как ComboBoxes удается добиться такого поведения?

Спасибо

Ответы [ 3 ]

5 голосов
/ 13 ноября 2009

Когда вы вызываете form.Show(), передайте владельца пользовательского элемента управления (текущую форму) в качестве параметра владельца. Этот код не идеален, но вы поймете идею.

class MyControl : UserControl
{
    private DropDownForm form = new DropDownForm();

    public MyControl()
    {
        form.FormClosed += dropdownform_closed;
    }

    private void MethodThatShowsDropdown()
    {
        form.AddData(GetTheData());
        form.Show(this.Owner); // Or is it "this.Parent"?  I can never remember...
    }

    private void dropdownform_closed(object sender, EventArgs e)
    {
        DoSomething(form.SelectedValue);
    }
}
0 голосов
/ 13 ноября 2009

Вы должны предоставить родительскую форму только при вызове ShowModalDialog или Show. Когда вы сделаете это, форма будет дочерней по отношению к первой и всегда будет перекрывать ее в z-порядке.

0 голосов
/ 13 ноября 2009

Я не уверен, что это будет работать для вашего приложения, но использование ShowDialog() для отображения вашей "формы списка" сохранит ее в нужном месте. Недостатком является то, что он не позволит вам вернуться к родительской форме, пока список открыт.

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