C#でFORMアプリケーションでボタンを押下した際など何かの処理中に、フォームに薄いグレーの膜を張り、その薄い膜の中央で、くるくると回るインジケーターを表示しようとしてますが、フォーム全体を覆うような薄い膜を張る方法はないでしょうか。
Opacity を80% ほどに設定したFORMを表示すれば、見た目はそれっぽくなるのですが、ShowDialogでは後続の処理がとまり、Showでは、先頭のFORMを切り替える事ができるため、実現できませんでした。
また、ShowでTopMostをtrueにすることも試してみましたが、他のアプリケーションのウインドウにも掛かってしまい、うまくいきませんでした。
なにかよい方法なないでしょうか。
追記
C#
1 // 半透明にしたいコントロール 2 public class CPanel : Panel 3 { 4 public CPanel() 5 { 6 //SetStyle(ControlStyles.SupportsTransparentBackColor, true); 7 this.SetStyle(ControlStyles.SupportsTransparentBackColor, true); 8 //this.BackColor = Color.Transparent; // 透明 9 this.BackColor = Color.FromArgb(80, 0, 0, 0); // 半透明 10 } 11 } 12 13 // 半透明にしたいコントロールコントロールの配置 14 private void Btn_Click(object sender, EventArgs e) 15 { 16 var f = new CPanel(); 17 f.Location = new Point(0, 0); 18 this.Controls.Add(f); 19 f.Parent = this; 20 f.BringToFront(); 21 }
上記のコードを実行しても、半透明になっていないpanelがformに表示されるだけでした。
f.Parent = this;
を
f.Parent = Button01;
の様に、form上の別のコントロールを指定すると、そのコントロール(Button01)の上では半透明で表示されています。
希望としては、form全体に半透明で覆いたいです。
フォームの子として半透明のユーザーコントロールを作り、それを前面に出す、と言って通じますか?
Zuishinさま、ご回答ありがとうございます。
半透明のユーザーコントロールを作成し、表示することも考え試してみたのですが、うまくいきませんでした。
試したのは、SupportsTransparentBackColorをtrueにした、panelやlabelをform上に配置してみましたが、思ったような結果になりませんでした。
半透明のユーザーコントロールの作成方法が間違っているのでしょうか?
質問を編集してやってみたコードを追記し、期待とどこが違うのかを具体的に書いてください。コードはマークダウンのコードブロックを使ってください。
ShowDialog ではなく、Show
かつ、Owner指定

回答2件
あなたの回答
tips
プレビュー