C#传递控件并维护事件

时间:2011-04-18 01:30:00

标签: c# events controls mouseevent

假设我有Form我们称之为ParentForm,并且它包含Panel,我们称之为ContainerPanel。现在,ContainerPanel包含Panel,我们称之为EntityPanel

基本上,Form包含A 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的{​​{1}}需要转移到ContainerPanel

当用户释放鼠标时,我仍然需要触发ParentForm事件,但它无效。

Previously,我正在传递关于面板的信息,并在父窗体上创建一个新面板,并手动调用MouseDown方法。

正如我在上面的示例中所看到的,我现在正在做的是,我将完全相同的面板传递回父窗体。我希望MouseDown / MouseUp可以这样工作,但事实并非如此。

关于如何构建我的程序模块,我的想法已经不多了。 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这对我有用:

 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("!");
     };
 }