我正在制作一個自定義控制元件,想法是當滑鼠懸停在控制元件上時,背景顏色不同,當滑鼠不再懸停在控制元件上時,則回傳原始顏色。
一個問題是當滑鼠懸停在子控制元件上時什么也沒有發生
我已經嘗試為所有子控制元件分配一個通用的滑鼠懸停事件處理程式,但是無論如何當滑鼠快速移動時什么也沒有發生。
我想要一個類似于按鈕控制的行為,無論滑鼠移動多快,背景顏色似乎都沒有問題
uj5u.com熱心網友回復:
所有孩子都必須共享MouseEnter來自父級的事件將訪問的相同方法,因為如果沒有,當您的滑鼠懸停在子級上時,它將引發MouseLeave父級事件。
這是一個例子:
public partial class Test : Form
{
public Test()
{
InitializeComponent();
myPictureBox1.MouseEnter = (sender, e) => { AllControls_MouseEnter(); };
myLabel1.MouseEnter = (sender, e) => { AllControls_MouseEnter(); };
myLabel2.MouseEnter = (sender, e) => { AllControls_MouseEnter(); };
}
private void Panel_MouseEnter(object sender, EventArgs e)
{
AllControls_MouseEnter();
}
private void Panel_MouseLeave(object sender, EventArgs e)
{
AllControls_MouseLeave();
}
private void AllControls_MouseEnter()
{
Panel.BackColor = Color.Firebrick;
}
private void AllControls_MouseLeave()
{
Panel.BackColor = Color.White;
}
}
當然myPictureBox1,myLabel1和myLabel2是孩子的Panel,因為你可以弄清楚。
或者,如果您有很多控制元件,您可以遍歷所有Controls父集合(這是我會選擇的方法,而不是分配給所有控制元件),如下所示:
foreach (var c in Panel.Controls)
{
((Control)c).MouseEnter = (sender, e) => { AllControls_MouseEnter(); };
}
這是測驗表單的演示(有和沒有foreach...):

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/362223.html
標籤:C# winforms 鼠标移到 窗体设计器 鼠标移动
上一篇:根據檔案名的開頭創建目錄
下一篇:僅使用數字格式化文本框
