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);
}


Я добавил это, но это не работает

818   4  

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

    Ничего не найдено.