2017-06-26 6 views
1

私は自分のタブページの色を変更し、色を同期して戻す方法を知りました。タブページとラベルの色を同期して変更するにはどうすればいいですか

タイマーで使用してコードイムは、これは通常、何が起こるかである

Random rand = new Random(); 
int A = rand.Next(0, 255); 
int R = rand.Next(0, 255); 
int G = rand.Next(0, 255); 
int B = rand.Next(0, 255); 
tabPage1.BackColor = Color.FromArgb(A, R, G, B) 

です:without changing the label back colour. changing the back colour.

+0

"タブページとバックカラーが同期"?あなたはタブページの色を意味しましたか? 1つのコントロールの色のみを変更することを意味します...右ですか? – KernelMode

+0

私は単語を逃した。 –

+0

なぜ、Label.BackColor == Color.Transparentではありませんか? – TaW

答えて

0

理由はあなたがRBGチャンネルともアルファチャンネルの両方を変更しているということです。

あなたは255でアルファを続けると効果が消える..:

int A = 255; 

あなたは半透明色が独立したエンティティではないことを考慮する必要があります理解します。

代わりに、バックグラウンドをある程度明るくして、その外観が環境と変わるようにします。

しかし、背景はタブページとラベルでは同じではありません。ラベルの背景はタブページですが、タブページの背景は(おそらく)フォームです。

パネルにパネルと別のラベルを追加すると、パネルには第1ラベルと同じ色合いが表示されますが、パネルの第2ラベルはさらに濃くなりますrgb色が使用されています。

問題全体の背後にある理由は、a)Winformsが 'トランスペアレンシー'とb)'ambient propertyのルールを実装しているような気がします。

今度は、親からバックグラウンドをコピーして、子コントロールに塗りつぶし方法に関する情報を提供します。したがって、実際には 'transparent' LabelはTabPageの半透明色を親として取得し、周囲色と同じParentから取得した同じ色と組み合わせます。

これは、色がそれ自体に積み重なっていることを意味します。これは、半透明のブラシを使用してペイントするのと同じ効果です。より多くのストロークをオーバーレイすると、より多くのカラー・ショーと透明度が失われます。

最後に、半透明を実装する方法は実装されていません与えられた、自然な選択。 Photoshopのレイヤーモードを見ると、さまざまな方法があります。また、半透明のブラシで不透明な色に塗りつぶしをイメージすると、透明度を追加する必要があるという「正しい」結果を定義できます。 gdi +は何をするのですか?デフォルトの( 'normal')PSレイヤーモードもありません。 Winformsは絵をコントロールしません。

+0

ありがとう、それは働いて、余分な情報が助けました。 –

関連する問題