これは不可能であることが判明したため、Opacity を 0.01 に設定して、動的に生成された 2 番目のフォームを上に浮かせました。次に、メイン フォームで 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 では見られない null 参照例外が表示されます。これは修正できる可能性がありますが、まだ調べていません。