回答編集履歴

1

追記

2019/03/09 00:27

投稿

YAmaGNZ
YAmaGNZ

スコア10251

test CHANGED
@@ -1,3 +1,119 @@
1
1
  他の方法ですが、[Control.DrawToBitmap](https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.control.drawtobitmap?view=netframework-4.7.2)を使用し、コントロールをキャプチャーし、
2
2
 
3
3
  対象コントロールの上にPictureBox等を乗せてキャプチャーした画像を描画するとか
4
+
5
+
6
+
7
+ ### 追記
8
+
9
+ サンプル
10
+
11
+ ```C#
12
+
13
+ /// <summary>
14
+
15
+ /// コントロールのEnableを変更し、色が変わっていないように見せる
16
+
17
+ /// </summary>
18
+
19
+ /// <param name="target">Enableを変更するコントロール</param>
20
+
21
+ /// <param name="value">Enableの値</param>
22
+
23
+ /// <param name="parent">変更するコントロールの親コントロール</param>
24
+
25
+ private void ChangeEnabledMask(Control target,bool value , ContainerControl parent)
26
+
27
+ {
28
+
29
+ if(value)
30
+
31
+ {
32
+
33
+ // マスク用のPictureBoxを見つけて消す
34
+
35
+ Control[] masks = this.Controls.Find($"{target.Name}_Mask", false);
36
+
37
+
38
+
39
+ foreach (Control c in masks)
40
+
41
+ {
42
+
43
+ this.Controls.Remove(c);
44
+
45
+ c.Dispose();
46
+
47
+ }
48
+
49
+ }
50
+
51
+ else
52
+
53
+ {
54
+
55
+ Control[] masks = this.Controls.Find($"{target.Name}_Mask", false);
56
+
57
+
58
+
59
+ if(masks.Length==0)
60
+
61
+ {
62
+
63
+ // コントロールをキャプチャ
64
+
65
+ Bitmap img = new Bitmap(target.Width, target.Height);
66
+
67
+ target.DrawToBitmap(img, new Rectangle(0, 0, target.Width, target.Height));
68
+
69
+
70
+
71
+ // マスク用のPictureBoxを作成
72
+
73
+ PictureBox maskpic = new PictureBox() { Name = $"{target.Name}_Mask",
74
+
75
+ Location = target.Location,
76
+
77
+ Size = target.Size,
78
+
79
+ Image = img,
80
+
81
+ Visible = true,
82
+
83
+ Enabled = value };
84
+
85
+
86
+
87
+ // 表示
88
+
89
+ parent.Controls.Add(maskpic);
90
+
91
+ maskpic.BringToFront();
92
+
93
+
94
+
95
+ }
96
+
97
+ }
98
+
99
+ target.Enabled = value;
100
+
101
+
102
+
103
+ }
104
+
105
+
106
+
107
+
108
+
109
+ //フォームに直接置いたコントロールの場合こう呼ぶ
110
+
111
+ ChangeEnabledMask(radioButton1, true, this);
112
+
113
+
114
+
115
+ ```
116
+
117
+
118
+
119
+ DrawToBitmapを使用しても正常にキャプチャーできないコントロールもありますので、その場合は別の方法を考えてください。