C # Передача управления и поддержание событий - PullRequest
1 голос
/ 18 апреля 2011

Скажем, у меня есть Form, который мы назовем ParentForm, и он содержит Panel, который мы назовем ContainerPanel.Теперь ContainerPanel содержит Panel, который мы назовем EntityPanel.

Так что в основном Form содержит Panel, который содержит Panel.

В ContainerPanel у нас есть:

void EntityPanel_MouseDown(object sender, MouseEventArgs e)
{
  ContainerPanel.Controls.Remove(EntityPanel);
  ParentForm.AcceptEntityPanel(EntityPanel);
}

, а в MainForm у нас есть:

void AcceptEntityPanel(Panel panel)
{
  Controls.Add(panel);
  panel.MouseUp += new MouseEventHandler(
    delegate(object sender, MouseEventArgs e)
    {
      MessageBox.Show("Mouse has been released.");
    });
}

Примечание: это только пример кода, который я только что набрал здесьбез проверки синтаксиса и т. д. Я понимаю, что объединить эти две функции в одну - тривиально, однако в моем приложении эти две функции выполняют несколько других функций и должны быть отдельными.

Таким образом, EntityPanel,который принадлежит ContainerPanel должен быть переведен в ParentForm, когда пользователь нажимает кнопку мыши.

Когда пользователь отпускает мышь, мне все еще нужно, чтобы событие MouseUp было запущено, но этоне работает.

Ранее я передавал информацию о панели и создавал новую панель в родительской форме, а также вручную вызывал метод MouseDown.

Что я делаю сейчас, как вы можете видеть в моем примере выше, это то, чтоЯ передаю точно такую ​​же панель обратно в родительскую форму.Я надеялся, что таким образом будет работать MouseDown / MouseUp, однако это не сработало.

У меня заканчиваются идеи о том, как еще структурировать этот модуль моей программы.Есть идеи?

1 Ответ

0 голосов
/ 18 апреля 2011

Это работает для меня:

 void Form1_Load(object sender, EventArgs e)
 {
    var innerPanel = new Panel();
    outerPanel.Controls.Add(innerPanel);

    innerPanel.MouseDown += (a,b) => 
     { 
       outerPanel.Controls.Remove(innerPanel);
       Controls.Add(innerPanel);
       innerPanel.MouseUp += (x,y) => MessageBox.Show("!");
     };
 }
...