Как создать полноэкранный вид группы элементов управления, которая принадлежит вкладке - PullRequest
0 голосов
/ 07 января 2011

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

1 Ответ

7 голосов
/ 07 января 2011

Это может быть элегантно сделано поддержкой Winforms для переопределения элемента управления.Вы можете переместить его во временную форму, которая отображается в полноэкранном режиме.Все обычные обработчики событий по-прежнему работают как обычно.Вот пример реализации, он работает для любого элемента управления:

    public static void ShowFullScreen(Control ctl) {
        // Setup host form to be full screen
        var host = new Form();
        host.FormBorderStyle = FormBorderStyle.None;
        host.WindowState = FormWindowState.Maximized;
        host.ShowInTaskbar = false;
        // Save properties of control
        var loc = ctl.Location;
        var dock = ctl.Dock;
        var parent = ctl.Parent;
        var form = parent;
        while (!(form is Form)) form = form.Parent;
        // Move control to host
        ctl.Parent = host;
        ctl.Location = Point.Empty;
        ctl.Dock = DockStyle.Fill;
        // Setup event handler to restore control back to form
        host.FormClosing += delegate {
            ctl.Parent = parent;
            ctl.Dock = dock;
            ctl.Location = loc;
            form.Show();
        };
        // Exit full screen with escape key
        host.KeyPreview = true;
        host.KeyDown += (KeyEventHandler)((s, e) => {
            if (e.KeyCode == Keys.Escape) host.Close();
        });
        // And go full screen
        host.Show();
        form.Hide();
    }

Пример использования:

    private void button1_Click(object sender, EventArgs e) {
        ShowFullScreen(tabControl1);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...