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, расширенного до полноэкранного размера.