【发布时间】:2015-05-20 15:32:41
【问题描述】:
我有一个表单,我用它来覆盖我不希望用户在给定时间弄乱的东西。当我使用这个覆盖表单来覆盖整个表单时,一切都很好。但是,当我使用它覆盖面板时,LocationChanged 事件永远不会触发!我尝试更改面板的属性以查看是否有某些东西以某种方式阻止它。我尝试使用 Dock = Fill,我也尝试过匹配其父控件的大小并使用锚点...均无济于事。
我是否遗漏了什么会阻止 LocationChanged 事件触发?
叠加形式:
Panel PanelToCover = new Panel();
public Overlay(Panel paneltocover)
{
PanelToCover = paneltocover;
this.StartPosition = FormStartPosition.Manual;
this.AutoScaleMode = AutoScaleMode.None;
this.Location = paneltocover.PointToScreen(Point.Empty);
this.ClientSize = paneltocover.ClientSize;
paneltocover.LocationChanged += PanelCover_LocationChanged;
paneltocover.ClientSizeChanged += PanelCover_ClientSizeChanged;
this.Show(paneltocover);
paneltocover.Focus();
}
private void PanelCover_LocationChanged(object sender, EventArgs e)
{
this.Location = PanelToCover.PointToScreen(Point.Empty);
}
private void PanelCover_ClientSizeChanged(object sender, EventArgs e)
{
// This works without an issue
this.ClientSize = PanelToCover.ClientSize;
}
编辑: 我很傻。面板相对于其所有者的位置永远不会改变。我正在检查 PointToScreen 值,观察它的变化,并想知道为什么 LocationChanged 事件从未触发。
【问题讨论】:
-
为什么面板的位置会改变?您通常只更改表单的位置。