質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

Q&A

解決済

2回答

10906閲覧

C# Enabledで色を変えない方法

fia

総合スコア57

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

1グッド

1クリップ

投稿2019/03/07 13:36

編集2019/03/08 23:51

前提・実現したいこと

コントロール(ラジオボタン・チェックボックス・テキストボックス等々)を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

bochan2👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takabosoft

2019/03/08 00:40

「Enabledにした際」 は 「Enabled=falseにした際」の誤りですか?
fia

2019/04/01 11:30 編集

そうです。 すみません。わかりにくい表現を使用してしまいました。 修正させていただきます。
guest

回答2

0

ベストアンサー

凝ったデザインを使うなら WPF を使うのが楽です。
Windows Forms の場合は次を参照してください。

TextBoxコントロールのEnabledプロパティをFalseにしても前景色と背景色を変えないようにする

投稿2019/03/07 14:01

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2019/03/07 14:40

確かにそれがないと苦行ですね。
fia

2019/03/10 11:56

教えてくださいました。サイトと私が調べて行った結果 textBox1.ReadOnly = true; textBox1.ForeColor = textBox1.ForeColor; textBox1.BackColor =SystemColors.Window; checkBox1.AutoCheck = false; checkBox1.Checked = true; ラジオボタンはチェックボックスと同じ方法 上記の方法で解決しました。 ありがとうございました。
guest

0

他の方法ですが、Control.DrawToBitmapを使用し、コントロールをキャプチャーし、
対象コントロールの上にPictureBox等を乗せてキャプチャーした画像を描画するとか

追記

サンプル

C#

1 /// <summary> 2 /// コントロールのEnableを変更し、色が変わっていないように見せる 3 /// </summary> 4 /// <param name="target">Enableを変更するコントロール</param> 5 /// <param name="value">Enableの値</param> 6 /// <param name="parent">変更するコントロールの親コントロール</param> 7 private void ChangeEnabledMask(Control target,bool value , ContainerControl parent) 8 { 9 if(value) 10 { 11 // マスク用のPictureBoxを見つけて消す 12 Control[] masks = this.Controls.Find($"{target.Name}_Mask", false); 13 14 foreach (Control c in masks) 15 { 16 this.Controls.Remove(c); 17 c.Dispose(); 18 } 19 } 20 else 21 { 22 Control[] masks = this.Controls.Find($"{target.Name}_Mask", false); 23 24 if(masks.Length==0) 25 { 26 // コントロールをキャプチャ 27 Bitmap img = new Bitmap(target.Width, target.Height); 28 target.DrawToBitmap(img, new Rectangle(0, 0, target.Width, target.Height)); 29 30 // マスク用のPictureBoxを作成 31 PictureBox maskpic = new PictureBox() { Name = $"{target.Name}_Mask", 32 Location = target.Location, 33 Size = target.Size, 34 Image = img, 35 Visible = true, 36 Enabled = value }; 37 38 // 表示 39 parent.Controls.Add(maskpic); 40 maskpic.BringToFront(); 41 42 } 43 } 44 target.Enabled = value; 45 46 } 47 48 49//フォームに直接置いたコントロールの場合こう呼ぶ 50ChangeEnabledMask(radioButton1, true, this); 51

DrawToBitmapを使用しても正常にキャプチャーできないコントロールもありますので、その場合は別の方法を考えてください。

投稿2019/03/07 15:37

編集2019/03/09 00:27
YAmaGNZ

総合スコア10242

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問