C# 传递控件和维护事件

本文关键字:维护 事件 控件 | 更新日期: 2023-09-27 17:50:20

假设我有一个Form,我们称之为ParentForm,它包含一个我们称之为ContainerPanelPanel。现在,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.");
    });
}

注意:这只是示例代码,我刚刚在这里输入了没有验证语法等。我意识到将这两个函数合二为一是微不足道的,但是在我的应用程序中,这两个函数执行其他几件事,并且应该是分开的。

所以属于ContainerPanelEntityPanel需要在用户按下鼠标时转移到ParentForm

当用户释放鼠标时,我仍然需要触发MouseUp事件,但它不起作用。

以前,我传递有关面板的信息并在父窗体上创建新面板,并手动调用 MouseDown 方法。

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

我对如何构建我的程序的这个模块没有想法了。有什么想法吗?

C# 传递控件和维护事件

这对

我有用:

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