質問: ### 前提・実現したいこと コントロール(ラジオボタン・チェックボックス・テキストボックス等々)をEnabled=falseにした際に見にくいので 色をそのままにしておきたいです。 方法として2つ考えたのですが、 1つ目、Enabledでもそのままの色にしておく。 2つ目、透明なパネルやピクチャボックスを最前面に配置する。 上記、どちらかの方法で解決できないかと考えました。 Color.Transparentを設定することで親のコントロールと同じ色になるのは分かったのですが、 間に別のコントロールを入れると消えてしまう。 しかしうまくいかなかったので、ご教授願います。 ### 試したこと SetStyle(ControlStyles.SupportsTransparentBackColor, true); BackColorプロパティをColor.Transparent 透過pngのMakeTransparent(); ### 補足情報(FW/ツールのバージョンなど) 参考にしたサイト http://ossannt.hatenablog.com/entry/2013/12/02/191004 https://matome.naver.jp/odai/2146317346494601701 https://dobon.net/vb/dotnet/control/tbenabledfalse.html
回答: 他の方法ですが、Control.DrawToBitmapを使用し、コントロールをキャプチャーし、 対象コントロールの上にPictureBox等を乗せてキャプチャーした画像を描画するとか ### 追記 サンプル ``` /// /// コントロールのEnableを変更し、色が変わっていないように見せる /// /// Enableを変更するコントロール /// Enableの値 /// 変更するコントロールの親コントロール private void ChangeEnabledMask(Control target,bool value , ContainerControl parent) { if(value) { // マスク用のPictureBoxを見つけて消す Control[] masks = this.Controls.Find($"{target.Name}_Mask", false); foreach (Control c in masks) { this.Controls.Remove(c); c.Dispose(); } } else { Control[] masks = this.Controls.Find($"{target.Name}_Mask", false); if(masks.Length==0) { // コントロールをキャプチャ Bitmap img = new Bitmap(target.Width, target.Height); target.DrawToBitmap(img, new Rectangle(0, 0, target.Width, target.Height)); // マスク用のPictureBoxを作成 PictureBox maskpic = new PictureBox() { Name = $"{target.Name}_Mask", Location = target.Location, Size = target.Size, Image = img, Visible = true, Enabled = value }; // 表示 parent.Controls.Add(maskpic); maskpic.BringToFront(); } } target.Enabled = value; } //フォームに直接置いたコントロールの場合こう呼ぶ ChangeEnabledMask(radioButton1, true, this); ``` DrawToBitmapを使用しても正常にキャプチャーできないコントロールもありますので、その場合は別の方法を考えてください。