次のようなもので手動で作成される単純なユーザーコントロールを作成しました
MyUserControl ctrl = new MyUserControl();
コントロールはBackColor = Color.Transparentを持つように設計されており、コントロールの親をフォームの色に変えるまで、正常に動作します。
透明のように聞こえるかもしれませんが、フォームに存在するすべてのコントロールも非表示にします。しっかりした背景を取得するコントロールか、それを接続すると他の何かが発生し、他のコントロールが表示されなくなるのか、100% 確信が持てません。
基本的にこうすれば
- フォームを作成する
- その上にボタンをドロップします
- ボタンのクリックハンドラーで、次のことを行います
例
MyUserControl ctrl = new MyUserControl();
ctrl.Parent = this;
ctrl.BackColor = Color.Transparent;
ctrl.Size = this.Parent.ClientRectangle.Size;
ctrl.Location = this.Parent.ClientRectangle.Location;
ctrl.BringToFront();
ctrl.Show();
基本的に、フォーム上に下にあるコントロールを表示しながら、ユーザーコントロールをフォーム全体にオーバーレイする必要があります(したがって、透明な背景)。実際にはフォームに属しておらず、他のすべてのものの上に表示されているだけなので、フォームコントロールコレクションに追加したくありません
親を設定せずに同じことを試みましたが、コントロールはまったく表示されませんでした。
ありがとう!
編集: ユーザー コントロールで OnPaintBackground メソッドをオーバーライドし、背景がペイントされないようにすると機能しますが、DrawImage を使用してコントロールでペイントしている PNG 画像の透明部分が台無しになります。これは理にかなっています。