オブジェクトをコンテナ内に積み重ねるGUIを作成するように求められました。ユーザは、上から下の視点からボックスを見ることになる。彼らはまた何が内部に積み重なっているのかを見ることができるようにしたいと考えています。これを解決するための私の最初の考えは、透明性でした。透明性に関する記事の一部を読んだことがありますが、両方の画像の問題を解決したものは見つからず、積み重ねられているかどうかを両方見ることができました。スタッキングコントロール(Winforms C#)(透明)
他のコントロールを上に置いて透明にするにはどうすればよいですか?これが本当に可能でない場合。この問題に対するより良いアプローチは何ですか?
私はカスタムコントロール(パブリック部分クラスMyControl:Control)を使用して問題を解決しています。私はついにコントロール上のイメージを透明にしました。親フォームに描画されたものはすべて画像を通して表示されます(親には楕円と四角形をペイントするためにonPaintを使用しています)。しかし、その上に配置された他のコントロールは透明ではありません。
私はこれを達成するために使用しているコードは以下の通りです:
public Image Image
{
get { return m_Image; }
set { m_Image = value; }
}
private void GridControl_Paint(object sender, PaintEventArgs e)
{
if (Image != null)
{
Graphics g = e.Graphics;
Bitmap bitMap = new Bitmap(Image);
//This is not working... the color array always comes back empty
//This is how I would rather making things transparent...
Color[] colorArray = bitMap.Palette.Entries;
if (colorArray.Length > 0)
{
ColorMap[] colorMap = new ColorMap[colorArray.Length];
for (int index = 0; index < colorArray.Length; index++)
{
colorMap[index] = new ColorMap();
colorMap[index].OldColor = colorArray[index];
colorMap[index].NewColor = Color.Transparent;
}
}
//Ok fine so the above is not working... let me force it.
//Get each pixel in the image and change the color.
else
{
for (int x = 0; x < bitMap.Width; x++)
{
for (int y = 0; y < bitMap.Height; y++)
{
Color pixelColor = bitMap.GetPixel(x, y);
Color newColor = Color.FromArgb(100, pixelColor);
bitMap.SetPixel(x, y, newColor);
}
}
}
bitMap.MakeTransparent();
g.DrawImage(bitMap, this.ClientRectangle);
}
}
WinFormsからWPFに移行したいのですが、このプロジェクトではオプションではありません:-( スタックコントロールが必要です。左クリック、他を右クリックしてリストから選択)、適切な場所を移動したり、移動したりする必要があります。 コードをありがとうございます!これはWinFormsで可能であることを証明しようとしているだけです。 – Billy