Windows form C# изменение пользовательского элемента управления с помощью кода
У меня есть форма windows, и я не хочу делать какие-либо другие формы windows, только одна форма windows и различные пользовательские элементы управления как я могу переключаться между пользовательскими элементами управления, например, скрыть один и показать другой пользовательский элемент управления программно ?
private void Btt_info_Click(object sender, EventArgs e)
{
Frm_Main frm_main = new Frm_Main();
frm_main.Controls["panel1"].Controls.Clear();
UC_Info uc_info = new UC_Info();
frm_main.Controls["panel1"].Controls.Add(uc_info);
}
Я добавил это, но это не работает
4 ответов:
Добавьте элемент управления контейнером (если я правильно помню, в панели инструментов есть раздел контейнеры?), как панель. Создайте usercontrols для того, что вы хотите динамически переключать. Так как "домашняя страница" UserControl и в 'LoginPage' управления. Динамически добавьте в контейнер элемент управления usercontrol, который вы хотите отобразить. Если вы хотите, удалите его из контейнера и добавьте другой usercontrol:
Panel myPanel = new Panel(); LoginPage ctlLoginPage = new LoginPage(); HomePage ctlHomePage = new HomePage(); //add the loginpage to the panel first myPanel.Controls.Add(ctlLoginPage); ...do stuff... //remove whatever control is currently in the Panel myPanel.Controls.Clear(); //add the other control, the HomePage control instead now myPanel.Controls.Add(ctlHomePage); ..do other stuff...Обычно я делаю это таким образом, чтобы вы оставили свою форму открытой для добавления общего элементы управления и прочее, что может быть разделено между вашими различными "страницами".
EDIT: обратите внимание, что обычно я добавляю панель в конструктор, а не создаю ее динамически в коде. Это был всего лишь пример.
EDIT: взаимодействие между вашей основной формой и usercontrols может быть обработано несколькими различными способами, и я не говорю, что любой из них является правильным методом.
- вы создаете статическое свойство для своей панели в главной форме, чтобы вы всегда можете получить доступ это чтобы поменять местами ваши элементы управления.
В этом примере я также добавлю статический метод для него
enum PanelControlsEnum {HomePage, LoginPage}; public static Panel MyContainerPanel {get;set;} public static void SwitchPanelControls(PanelControlsEnum selControl){ ..put your switch panels code here.. }Затем внутри вашего usercontrol вы вызываете предопределенный метод, что-то вроде:
MainForm.SwitchPanelControls(PanelControlsEnum.HomePage);
- другой способ-привязать событие нажатия кнопки к вашей основной форме а не внутри формы.
Вот Так:
HomePage ctlHomePage = new HomePage(); ctlHomePage.Click += MyClickEvent; myPanel.Controls.Add(ctlHomePage)...
private void MyClickEvent(object sender, RoutedEventArgs e) { ..switch user control code here... }
Создайте метод, возвращающий объект UserControl. Затем поместите условия в этот метод относительно того, какой элемент управления вы хотите загрузить при определенном условии, а затем в основной код формы.
UserControl control = GetControlFromMyMethod(); form1.Controls.Add(control);Где 'control' - возвращаемый элемент управления из вашего метода.
Чтобы удалить существующий, необходимо выполнить цикл через форму form1.Элементы управления и узнать элемент управления и вызвать "удалить".
Обновление: У Майка С есть лучшая идея добавления панели и загрузки нужного элемента управления на панель как и тогда, легко удалить свой элемент управления, и вам не нужно будет перебирать элементы управления forms, чтобы найти его, а затем удалить.
Попробуйте это:
this.Controls.Clear(); usercontrol load = new usercontrol (); this.Controls.Add(load); load.Show();
Вы могли бы попробовать это это определенно поможет вам, как это помогло мне много это коротко и прямо в точку надеюсь, что поможет
Comments