2016-04-07 13 views
0

私は他のPictureBox(ピン)を追加したPictureBox(マップ)を持っています。 (winformsアプリケーションで) ピンバックカラーを透明に設定しました。すべてのピンの親はマップです。 問題は、ピンの透明度が正しく機能しないことです。すべてのピンにマップの背景があります。 100以上のピンがあり、ピンが近くにある場合、マップの背景がピンの背景と異なる場合、ピンのコーナーを見ることができます。 PictureBoxの代わりにパネルとラベルを使ってみましたが、成功しませんでした。 問題の解決方法を教えてください。 ありがとうございます。PictureBox透明度が正しく動作しない

+0

_a他のPictureBoxes_を追加したところでPictureBox(map)を実際に__nest__しましたか?あなたはコード内でこれを行うことを__need__: 'pbPin01.Parent = pbMap;'など。100ピンについては、それらをペイントすることを検討します。彼らはインタラクティブにする必要がありますか? – TaW

+0

レイヤリングをサポートする透明な 'PictureBox'が必要な場合は、この投稿が参考になるかもしれません:[C#で透明なレイヤーを作る方法(http://stackoverflow.com/a/36102074/3110834)。しかし、何百ものピンについては、GDI +を使ってレンダリングすることをお勧めします。あなたは単にそれらのためのテストをヒットし、それらをインタラクティブにすることもできます。 –

+0

あなたは_Everyピンの親をmap_と書いています。本当の透明性があればうまくいくでしょう。 PictureBoxは、Panelのようなコンテナとは異なり、コントロールを__movingすると__not__はParent.Chil関係を作成します。あなたはcode__でそれを行う必要があります! – TaW

答えて

1

まあ、duh。 WindowsはPhotoshopではありません。またはフラッシュ。またはSilverlight。またはWPF。

Windowsでは、特定の条件下で透過を許可する非常に単純なレイヤーシステムを使用していますが、本格的なレイヤードシステムよりも実際には回避策があります。基本的には、イメージを透過的にレンダリングする場合は、まずコントロールの下にそのレンダリングを依頼し、それをレンダリングします。

これは、階層全体が機能するため、デフォルトで透過性は親子関係でのみ機能することを意味します。子は親をその一部として簡単にレンダリングでき、独自の背景特定の状況下で。だからあなたのピンをあなたの背景の子供にすると、透明は期待どおりに働くでしょう。

しかし、PictureBoxは実際には写真を表示するためにのみ設計されています。何百ものピンを使ってマップをレンダリングする必要がある場合は、ほとんどの場合、Windowsコントロールを使用してマップを作成することは望ましくありません。背景とピンのレンダリングを処理するオーナー描画コントロールは、おそらくよりうまくいくでしょう。あなたのユースケースではそれほど難しい場合は、WPFを見たいと思うかもしれません - あなたは簡単にWinformsコントロールの中にWPFコントロールを埋め込むことができます。そして、WPFは、あなたがやろうとしているものに対してもっと良いツールを提供します。

+1

ここで最も重要な点は、IMO:「コントロールを乱用しないでください...自分で描く」。 WinFormsではTrueよりはるかに頻繁に。人々がそれを思わせるようにはそれほど恐ろしいことではありません。 – DonBoitnott

+0

ありがとうございました。私はすでにアプリケーションでWPFコントロールを使用していましたが、私はbingマップを置いていましたが、財政的理由からbingマップをあきらめなければなりませんでした。しかし、私はWPFを使ってそのマップを実行しようとし、それをbingマップの代わりに配置します。私はこのオプションについて考えていませんでした:(私はpictureboxの問題を解決できると思っていましたが、画像での作業経験はあまりありませんでした。 – turdeanu

関連する問題