C# プロジェクトにいくつかの丸いボタンを配置し、その背後にいくつかのデータを配置する必要があるユーザー インターフェイスがあります。ボタンは System.Windows.Forms.buttons で、透明な GIF イメージを使用して作成しました。ただし、透明な領域は透明ではありません。オンラインで参考文献を探しましたが、これを適切に行う方法についての提案は見つかりませんでした。Visual Studio 2008 でそれを行うことについて言及されていますが、このプロジェクトは 2005 年に維持する必要があります。ヘルプや提案をいただければ幸いです。
8 に答える
画像の透明度を得るには、WinForms で PNG を使用する必要があると確信しています。私はそれらをうまく使ったことを知っています。
編集:PNGを使用したとき、ImageコントロールでForm1.BackgroundImageにオーバーレイしていました。私はそれらをボタンで使用していませんでした。
最善の策は、ボタン コントロールの使用からイメージ コントロールの使用に切り替えることだと思います。ボタンのスタイルをフラットに変更してみてください (フラットだったと思いますが、他のスタイルの 1 つかもしれません)、その方法で必要な効果が得られるかどうかを確認してください。
Button のFlatStyle プロパティを "Flat" に設定するだけです。これが PNG で機能することはわかっていますが、GIF ではテストしていません。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
public class TransparentControl : Control
{
public TransparentControl()
{
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
SetStyle(ControlStyles.Opaque, true);
SetStyle(ControlStyles.ResizeRedraw, true);
this.BackColor = Color.Transparent;
}
protected override void OnPaint(PaintEventArgs pevent)
{
Graphics g = pevent.Graphics;
g.DrawRectangle(Pens.Black, this.ClientRectangle);
}
protected override void OnPaintBackground(PaintEventArgs pevent)
{
// don't call the base class
//base.OnPaintBackground(pevent);
}
protected override CreateParams CreateParams
{
get
{
const int WS_EX_TRANSPARENT = 0x20;
CreateParams cp = base.CreateParams;
cp.ExStyle |= WS_EX_TRANSPARENT;
return cp;
}
}
// rest of class here...
}
これを試して:
Bitmap temp = new Bitmap(button1.Image);
temp.MakeTransparent(Color.Black); //your transparent color, in this case black
button1.Image = (Image) Logo;
temp.Dispose();
temp = null;
Visual Studio 2005を使用していて、上記の例に従ってみましたが、機能しませんでした(createメソッドのスニペット)。フォームの背景があり、斜角の透明なボタンを作成しようとしています。
現在、上記のコードを挿入すると、背景が透明になり、ボタンの色がすべて白になります。
これが私のコードの抜粋です
Bitmap mainFormBackground = (Bitmap)Image.FromFile("background.jpg");
this.BackgroundImage = mainFormBackground;
this.BackColor = Color.Black;
this.ForeColor = Color.White;
いくつかのボタンを追加します
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
SetStyle(ControlStyles.Opaque, true);
this.BackColor = Color.Transparent;
私も試しました
btnName.BackColor = Color.Transpare;
これもうまくいきませんでした
ボタンから派生したクラスを作成し、このコードを配置します。
protected override CreateParams CreateParams
{
get
{
const int WS_EX_TRANSPARENT = 0x20;
CreateParams cp = base.CreateParams;
cp.ExStyle |= WS_EX_TRANSPARENT;
return cp;
}
}
そしてcreateメソッドで
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
SetStyle(ControlStyles.Opaque, true);
this.BackColor = Color.Transparent;
次の回答は Visual Studio 2012 で検証されており、backgroundImage 形式の BMP、GIF、PNG、および JPG で動作します。MSペイントで作成。
ボタンから背景を表示するには:
ボタンのプロパティ ウィンドウに移動します。次に、以下の画像に示すように FlatStyle と BackColor を変更します。
注: 色は Web タブから選択し、FlatStyle は Flat として選択します。
ただし、この後、マウスがホバーしないか、選択または押されるまで、ボタンは透明になります。その状態では、不透明な色になります。常に透明にしたい場合は、以下の画像に従って、対応する色を以前のように透明に変更します。変更する色は、「MouseOverBackColor」と「MouseDownBackColor」です。
注: 図のように常に透明を選択すると、ボタンが動作している間、ボタンの外観に変化はありません。
それがあなたを助けることを願っています。
頑張ってください!
ボタンの BackColor プロパティを「透明」に設定する必要があります。
Button1.BackColor = System.Drawing.Color.Transparent;