Панель смена владельца? - PullRequest
       37

Панель смена владельца?

0 голосов
/ 13 февраля 2012

В моем приложении на C # есть основная форма с панелью main_panel. Всякий раз, когда пользователь выбирает что-то в меню, скажем, «А», главная панель переключается на панель формы А (посмотрите на код), * ​​1002 *.

Поскольку A_panel охватывает все элементы управления в форме A, я могу вызвать все элементы управления формы A в основную форму.

if ((string)MainMenu.SelectedItem == "A")
{
    FormA A = new FormA();
    new_panel = A.Controls["A_panel"] as Panel;
}
this.main_panel.Controls.Clear();
this.main_panel.Controls.Add(new_panel);

У меня вопрос, когда пользователь снова выбирает меню A, я не хочу снова создавать FormA с помощью new FormA(). Я сделал это потому, что когда я добавляю элемент управления к main_panel, владение A_panel меняется на основную форму, так что можно было снова добавить элемент управления к main_panel.

Итак, как снова сменить владельца A_panel на форму А? А как вообще решить мою проблему?

Ответы [ 2 ]

1 голос
/ 13 февраля 2012

По какой причине вы не можете использовать UserControl и сохранить ссылку на него в своей форме? Таким образом, вы можете просто показать / скрыть его, когда пользователь хочет изменить представления. Было бы намного проще расширяться и взаимодействовать. Вот пошаговое руководство по MSDN, с которого можно начать.

0 голосов
/ 14 февраля 2012

Похоже, что UserControl будет лучше соответствовать вашим потребностям. Имейте один экземпляр в FormA, а другой - в MainForm.

Если по какой-то причине вы не можете использовать пользовательские элементы управления, вы можете, по крайней мере, извлечь код из автоматически сгенерированного файла конструктора (я полагаю, именно поэтому вы вообще используете FormA).

Как в:

FormA

public FormA()
{
    var mainPanel = CreateMainPanel();
    this.Controls.Add(mainPanel)
}

public Panel CreateMainPanel()
{
    //...build up your control tree. Cut the code from the designer if necesssary
}

MainForm

FormA _A = new FormA();

public void HandleMainMenuClick(object sender, EventArgs e)
{      
    if ((string)MainMenu.SelectedItem == "A")
    {    
        new_panel = _A.CreateMainPanel();
    }
    this.main_panel.Controls.Clear();
    this.main_panel.Controls.Add(new_panel);    
}
...