maysamfth Ответов: 2

Разверните форму, размещенную в панели


Привет Я добавил форму windows внутри небольшой панели:
форма form1 Ф1=новые формы form1();
Ф1.Топлевел=ложь;
панель 1.Управления.Добавить (f1);
Ф1.Показать();

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

этот.Топлевел=истина;
этот.Покажите();

Что я уже пробовал:

форма form1 Ф1=новые формы form1();
Ф1.Топлевел=ложь;
панель 1.Управления.Добавить (f1);
Ф1.Показать();

//
этот.Топлевел=истина;
этот.Покажите();

2 Ответов

Рейтинг:
2

BillWoodruff

Как OriginalGriff объясняет вам, здесь, вы можете снять панель, или пользовательских элементов управления, или других ContainerControl, от формы controlcollection С и затем добавить его в другую форму (или пользовательских элементов управления и т. д.) Экземпляре коллекции controlcollection.

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

Прежде чем вы прочтете приведенный здесь пример перемещения элемента управления UserControl из основной формы во вторичную, подумайте о том, что вы можете сделать панель или элемент управления UserControl расширяющейся для заполнения формы, установив ее свойство Dock в значение Fill, а затем используя функцию SendToBack (), чтобы она охватывала другие элементы управления в форме. Затем вы можете сбросить "размер и положение" UserControl, установив свойство " док "обратно в "нет".

Чтобы использовать другую форму, показанную ' развернутой для отображения элемента управления UserControl:

0. создайте UserControl с необходимыми элементами управления, установив позиции "якорь" и " док " для создания нужного пользовательского интерфейса. назовите его " UserInterface1

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

1. создайте форму для хранения UserControl и покажите ее занимающей всю клиентскую область формы. назовите его " FullScreenViewForm

1. a. установите для свойства WindowState формы значение "развернуто".

1. B добавьте этот код в форму полноразмерного представления:

using System.Windows.Forms;

namespace YourNameSpace
{
    public partial class FullScreenViewForm : Form
    {
        public FullScreenViewForm()
        {
            InitializeComponent();
        }

        public UserInterface1 FullScreenViewUserControl { set; get; }

        public void SetUserInterface(UserInterface1 usercontrol)
        {
            this.FullScreenViewUserControl = usercontrol;
            this.Controls.Add(FullScreenViewUserControl);

            FullScreenViewUserControl.Dock = DockStyle.Fill;
        }
    }
}
2. Поместите экземпляр Userinterface1 Usercontrol в вашу основную форму и поместите его туда, где вы хотите: userInterface11

2. A. поместите кнопку на главную форму с именем: 'btnSwitchUserControlViewState

2. b. проводите вверх по этой кнопке Click EventHandler, как показано ниже

3. Вы будете контролировать, где экземпляр ' UserInterface1 появляется следующим образом в основной форме:
using System;
using System.ComponentModel;
using System.Windows.Forms;

namespace YourNameSpace
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }

        private FullScreenViewForm fullViewForm;

        // to begin with the UserControl is on the Main Form
        private bool UCViewIsLocal = true;

        private void Form1_Load(object sender, EventArgs e)
        { 
            fullViewForm = new FullScreenViewForm();
            fullViewForm.Closing += FullViewFormOnClosing;

            // see note
            this.Closing += OnClosing;
        }

        private void OnClosing(object sender, CancelEventArgs cancelEventArgs)
        {
            // see note
            if (fullViewForm != null)
            {
                fullViewForm.FormClosing -= FullViewFormOnClosing;
                fullViewForm.Close();
            }
        }

        private void FullViewFormOnClosing(object sender, CancelEventArgs cancelEventArgs)
        {
            if (fullViewForm != null && fullViewForm.FullScreenViewUserControl != null)
            {
                this.SuspendLayout();

                fullViewForm.FullScreenViewUserControl.Dock = DockStyle.None;
                fullViewForm.Controls.Remove(fullViewForm.FullScreenViewUserControl);

                this.Controls.Add(fullViewForm.FullScreenViewUserControl);
            
                this.ResumeLayout();

                fullViewForm.Hide();

                cancelEventArgs.Cancel = true;
                
                UCViewIsLocal = true;
            }
        }

        private void btnSwitchUserControlViewState_Click(object sender, EventArgs e)
        {
            if (UCViewIsLocal)
            {
                this.SuspendLayout();

                fullViewForm.SetUserInterface(userInterface11);
                fullViewForm.Show();
                fullViewForm.BringToFront();
                
                this.ResumeLayout();

                UCViewIsLocal = false;
            }
            else
            {
                fullViewForm.Close();
            }
        }
    }
}
Записи:

1. Создайте" полную форму просмотра " один раз, а затем покажите и спрячьте ее.

2. этот код полагается на событие закрытия" full view form", чтобы сделать правильную вещь, чтобы вернуть UserControl обратно на свой сайт в основной форме, но, поскольку код в этом EventHandler всегда предотвращает закрытие формы ...

.. Мы могли бы полагаться на то, что для приложения WinForms основная закрытая форма также закрывает все другие открытые формы, созданные приложением ...

однако... это лучшая практика программирования, чтобы поместить FormClosing EventHandler на основную форму и убедиться, что мы отключили EventHandler для FormClosing из формы, которую мы используем для просмотра UserControl, расширенного до полноэкранного размера.


Рейтинг:
1

OriginalGriff

Используйте настройку док-станции:

f1.TopLevel=false;
f1.Dock = DockStyle.Fill;
panel1.Controls.Add(f1);
Но, пожалуйста,не используйте для этого форму.
Вместо этого создайте UserControl, который содержит все ваши элементы управления и логику, и используйте его вместо этого. Если он также нужен вам как "независимая" форма, вы можете создать объект формы и дать ему только экземпляр UserControl.

Просто потому, что вы можете установить форму в качестве содержащегося элемента управления, это не значит, что вы должны!


maysamfth

так что спасибо, но я думаю, что не очень хорошо задал свой вопрос!
эта форма идеально подходит внутри панели, но я хочу создать существующий экземпляр формы вне панели. Предположим, пользователь вводит данные, но форма очень мала, и пользователь хочет видеть эту форму во весь экран. я хочу создать полный Экран Формы, добавленной внутри панели.

OriginalGriff

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

maysamfth

да, я хочу начать внутри панели, а затем переместить ее на весь экран.

OriginalGriff

Да!
Ты можешь это сделать...но есть большая вероятность, что потом все пойдет не так, как надо.
Чтобы максимизировать его, используйте панель.Управления.Remove чтобы удалить экземпляр из панели, установите значение TopLevel в true, а WindowState-в Maximized.
Но...будьте осторожны. Вы играете с вещами, которые на самом деле не предназначены для этого, и есть хороший шанс, что некоторые вещи перестанут работать или сломаются позже.Я настоятельно рекомендую вам сделать это через UserControl на панели, а затем использовать отдельную форму для отображения ее в развернутом виде - и скопировать информацию из пользовательского элемента управления в новый пользовательский элемент управления формы вместо того, чтобы "делиться" элементом управления между ними. Он будет намного "чище" и гораздо менее подвержен ошибкам, когда вы измените его позже.