私はC#を初めて使用します。非表示のボタンを作成したいのですが、C#ウィンドウフォームアプリケーションでクリック可能です。方法はありますか?BackColorをTransparentに試しましたが、それでも透明であるという事実は変わりません。
5 に答える
その簡単なこれを試してみてください。
透明にしたいボタンをクリックします。[プロパティ]から選択し、ポップアップFlatStyle
に設定します。次に、プロパティをに
変更します。BackColor
Transparent
これにより、ボタンが透明になります。
PictureBox
ただし、この方法で透過的にしたい場合は機能しません。
通常の背景と背景画像でのみ機能します。それがうまくいくことを願っています...
buttonLink.FlatStyle = FlatStyle.Flat;
buttonLink.BackColor = Color.Transparent;
buttonLink.FlatAppearance.MouseDownBackColor = Color.Transparent;
buttonLink.FlatAppearance.MouseOverBackColor = Color.Transparent;
参照:
元の記事とコードは次の場所にあります。
マウスが無効なコントロールの上にあるときにツールチップを表示する
@codeProject by tetsushmz
コード:
public class TransparentSheet : ContainerControl
{
public TransparentSheet()
{
// Disable painting the background.
this.SetStyle(ControlStyles.Opaque, true);
this.UpdateStyles();
// Make sure to set the AutoScaleMode property to None
// so that the location and size property don't automatically change
// when placed in a form that has different font than this.
this.AutoScaleMode = AutoScaleMode.None;
// Tab stop on a transparent sheet makes no sense.
this.TabStop = false;
}
private const short WS_EX_TRANSPARENT = 0x20;
protected override CreateParams CreateParams
{
[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
get
{
CreateParams l_cp;
l_cp = base.CreateParams;
l_cp.ExStyle = (l_cp.ExStyle | WS_EX_TRANSPARENT);
return l_cp;
}
}
}
説明:
実行する必要があるのは、無効にしたTextBox(コメントの1つで言及した)のオーバーレイとして指定されたコントロールを使用することです。オーバーレイコントロールのClickイベントに登録すると、無効になっているコントロールをクリックできます。
私はこのアプローチに反対することを強くお勧めし、それは一種のハックだと感じています。その上にオーバーレイコントロールがある無効なコントロールを使用する代わりに、実際には別のアプローチを探す必要があります。
おそらく、別のUIを使用するか、少なくともUserControlでラップして、この厄介なロジックを分離します。
ボタンのbackgroundプロパティをtransparentに設定しても、境界線は残ります。完全に透明なボタンが必要な場合は、次の2つのいずれかを実行します。
透明なパネルを作成し、Clickイベントにメソッドを割り当てます
またはできれば
BackColor(transparentに設定)のみで埋められるカスタムUserControlを作成し、Clickイベントにメソッドを割り当てます。
public class Invisible_Button : UserControl
{
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
this.Cursor = Cursors.Hand;
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.FillRectangle(new SolidBrush(this.BackColor), 0, 0, this.Width, this.Height);
}
}
やってみましたbutton.Visible = false
か?あなたが望むのがそれを隠すことだけであるならば、これは仕事をします。