2012-02-13 2 views
0

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

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

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

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

ответ

1

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

+0

Но я имею дело с более чем 5 ~ 6 меню в одно время. Итак, вы имеете в виду, что я должен поместить все их в одну форму и изменить ее? – Jaebum

0

Похоже, что 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);  
} 
+0

Но я имею дело с более чем 5 ~ 6 меню за один раз. Итак, вы имеете в виду, что я должен поместить все их в одну форму и изменить ее? – Jaebum

+0

Я не совсем понимаю ваш вопрос Ли. Как количество меню относится к вашему оригинальному сообщению? –

+0

Нет. Я имею в виду, когда я использую пользовательский контроль вместо – Jaebum