假设我有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可以这样工作,但事实并非如此。
关于如何构建我的程序模块,我的想法已经不多了。 有什么想法吗?
答案 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("!");
};
}