我在我的專案中直接排列了幾個標簽。現在,當我大約處于它們之間的邊緣時,我想執行諸如 Click 或 MouseEnter/Leave 之類的事件。我試圖在這個位置放置一個不可見的元素并從這個元素中捕獲事件,但是一旦我使元素不可見,事件就不再起作用了。
我不僅希望這對于 2 個標簽之間的邊緣,而且還希望在角落處最多 4 個標簽停靠在這個角落。
重要的是我需要在事件中知道它是哪個邊緣或角落,以及哪些標簽分別停靠在它上面。
我附上了一張圖片以更好地形象化這一點。突出顯示的地方只是我想捕捉這些事件的例子。但應該可以在標簽之間的任何邊緣和角落。

uj5u.com熱心網友回復:
也許一種選擇是自己繪制標簽的邊框,然后您就不需要在其間放置元素。
private void label3_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawRectangle(new Pen(new SolidBrush(Color.Red), 10f), label3.ClientRectangle);
base.OnPaint(e);
}
因此,如果您在標簽上添加 Paint Event,則可以繪制邊框(此處為紅色,寬度為 10)。邊框被視為標簽的一部分,所以在邊框上執行的所有事件都會以相同的方式觸發,
uj5u.com熱心網友回復:
實作此目的的一種方法是添加一個標簽作為背景,您可以將其設定為與表單背景相同的顏色,這將使其顯示為隱藏。
然后,您可以將 click、enter 和 leave 事件附加到該標簽,只要您將其他標簽之一的滑鼠游標移動到背景標簽上,這些事件就會觸發。
我模擬了這個螢屏,背景標簽顏色更深,所以你可以看到:

我將深色背景命名為“lblBackdrop”,將文本框命名為“txtMessage”。
然后我將以下處理程式附加到背景標簽:
using System;
using System.Windows.Forms;
namespace WinFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void lblBackdrop_Click(object sender, EventArgs e)
{
txtMessage.Text = string.Concat(txtMessage.Text, "Background clicked\n");
}
private void lblBackdrop_MouseLeave(object sender, EventArgs e)
{
txtMessage.Text = string.Concat(txtMessage.Text, "Background left\n");
}
private void lblBackdrop_MouseEnter(object sender, EventArgs e)
{
txtMessage.Text = string.Concat(txtMessage.Text, "Background entered\n");
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/360480.html
