現在、完全に透明な背景を持つフォームがあります。現時点では、ユーザーがフォーム上のコントロールにカーソルを合わせたときにフォーラムの上部に表示されるボックスを描く必要があります。
PictureBox にカーソルを合わせると、MouseEnter
イベントが適切にトリガーされ、ボタンVisible
の状態が true に設定され、MouseLeave
イベントによって false に設定されます。ボタン自体には同じイベントがMouseEnter
ありMouseLeave
ますが、Winforms はフォーム上の透明なスペースの下にあるフォームにマウス イベントを渡すため (ボタンで使用されている画像もそれらの周りで透明です)、ボタンをクリックすると消えます。フォームは、マウスがボタンまたはフォームの両方を「左」にしたと考えているためです。イベントのパススルーを停止する方法を知っている人はいますか?
あなたが尋ねるいくつかのコード?あなたが得るいくつかのコード:)
// Form Constructor!
// map = picturebox, this = form, move = first button, attach = second button
public Detached(PictureBox map)
{
InitializeComponent();
doEvents(map, this, this.attach, this.move);
}
// doEvents method! I use this to add the event to all controls
// on the form!
void doEvents(params Control[] itm)
{
Control[] ctls = this.Controls.Cast<Control>().Union(itm).ToArray();
foreach (Control ctl in ctls)
{
ctl.MouseEnter += (s, o) =>
{
this.attach.Visible = true;
this.move.Visible = true;
};
ctl.MouseLeave += (s, o) =>
{
this.attach.Visible = false;
this.move.Visible = false;
};
}
}