由于事实证明这是不可能的,我最终将第二个动态生成的表格浮动在顶部,不透明度设置为 0.01。然后,我使用主窗体上的 Resize 和 LocationChanged 事件根据需要调整和移动覆盖窗体。然后,我只需要根据需要处理覆盖表单单击事件即可。
public MainFrom()
{
InitializeComponent();
f = new Form();
f.Size = panel1.Size;
f.FormBorderStyle = FormBorderStyle.None;
f.BackColor = Color.Black;
f.Opacity = 0.01;
f.ShowInTaskbar = false;
f.Show(this);
f.Click += new System.EventHandler(this.UserClicked);
}
然后,此代码调整覆盖表单的大小以考虑主表单边框:
private void SetLocation()
{
// These next 2 lines calculate the width of the border
// and the title bar and then use these to off set the floating
// forms location correctly.
int xOffset = (this.Width - this.ClientSize.Width) / 2;
int yOffset= this.Height - this.ClientSize.Height - xOffset;
int x = this.Location.X + panel1.Location.X + xOffset;
int y = this.Location.Y + panel1.Location.Y + yOffset;
f.Location = new Point(x, y);
}
根据 MoMa 工具,这是 100% 兼容单声道的,并且代码可以按预期在 MonoDevelop 中编译。但是,如果我运行它,我会看到一个空引用异常,我在加载时在 MS .NET 中看不到,这可能是可以修复的,但我尚未对此进行研究。