You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在foreach循环中为动态生成的Panel添加MouseEnter、MouseLeave事件处理方法

问题解决方法

核心问题原因

你之前用this.BackColor修改的是窗体本身的背景色,因为类方法里的this默认指向当前窗体实例,而非触发事件的动态Panel。

正确实现代码

事件的sender参数就是触发当前事件的控件实例,你只需要把它转换为Panel类型,再修改属性即可:

void PanelMouseOver_Enter(object sender, EventArgs e)
{
    // 将sender转换为触发事件的Panel实例
    Panel currentPanel = (Panel)sender;
    // 自定义高亮背景色,可按需调整色值
    currentPanel.BackColor = Color.FromArgb(51, 51, 51);
}

void PanelMouseOver_Leave(object sender, EventArgs e)
{
    Panel currentPanel = (Panel)sender;
    // 恢复为初始背景色
    currentPanel.BackColor = Color.FromArgb(31, 31, 31);
}

现有代码优化提示

你当前循环逻辑存在隐藏问题:

  • int i = 0写在foreach循环内部,每次循环都会重置i为0,会导致所有Panel的Name重复、数组索引覆盖
  • Panel[] PanelMouseOver = new Panel[lineCount];写在循环内部,每次循环都会新建数组,之前存储的Panel实例会全部丢失
    可调整为如下结构:
// 索引i和Panel数组声明移到foreach循环外部
int i = 0;
Panel[] PanelMouseOver = new Panel[lineCount];
foreach (var line in File.ReadAllLines(filePath).Reverse())
{
    List<string> EntrySplit = line.Split('|').ToList();
    PanelMouseOver[i] = new Panel();
    // 原有Panel属性设置、事件绑定逻辑保持不变
    // ...
    // 循环末尾索引自增
    i++;
}

内容的提问来源于stack exchange,提问作者Jablo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 07:24:02