C# 传递控件和维护事件
本文关键字:维护 事件 控件 | 更新日期: 2023-09-27 17:50:20
假设我有一个Form
,我们称之为ParentForm
,它包含一个我们称之为ContainerPanel
的Panel
。现在,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.");
});
}
注意:这只是示例代码,我刚刚在这里输入了没有验证语法等。我意识到将这两个函数合二为一是微不足道的,但是在我的应用程序中,这两个函数执行其他几件事,并且应该是分开的。
所以属于ContainerPanel
的EntityPanel
需要在用户按下鼠标时转移到ParentForm
。
当用户释放鼠标时,我仍然需要触发MouseUp
事件,但它不起作用。
以前,我传递有关面板的信息并在父窗体上创建新面板,并手动调用 MouseDown 方法。
正如您在上面的示例中所看到的,我现在正在做的是我将完全相同的面板传递回父窗体。我曾希望这样MouseDown/MouseUp可以工作,但它没有。
我对如何构建我的程序的这个模块没有想法了。有什么想法吗?
这对
我有用:
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("!");
};
}