“pnlArr_Click”的重载与委托“System.EventHandler”不匹配
本文关键字:System 不匹配 EventHandler 重载 pnlArr Click | 更新日期: 2023-09-27 18:31:33
刚开始使用 C#,我一直卡在这个特定的代码上(更准确地说是lblArr[i, j].Click += pnlArr_Click;
行):
public void CreateLabelArray(int height, int width, int nrofShips)
{
pnlBase.Controls.Clear();
lblArr = new Label[height, width];
int xpos = 0;
int ypos = 0;
for (int j = 0; j < width; j++)
{
int column = j + 1;
for (int i = 0; i < height; i++)
{
Coordinaat pos = new Coordinaat();
pos.X = j;
pos.Y = i;
lblArr[i, j] = new Label();
lblArr[i, j].Left = xpos;
lblArr[i, j].Top = ypos;
lblArr[i, j].Width = 35;
lblArr[i, j].Height = 35;
lblArr[i, j].Tag = pos;
lblArr[i, j].Click += pnlArr_Click;
lblArr[i, j].BackColor = System.Drawing.Color.LightBlue;
lblArr[i, j].BorderStyle = BorderStyle.FixedSingle;
pnlBase.Controls.Add(lblArr[i, j]);
xpos += 0;
ypos += lblArr[i, j].Height;
}
xpos += 35;
ypos = 0;
}
}
当我试图找出在数组中的标签上按下了哪个特定的鼠标按钮时,我认为这种方法可能有效:
public int pnlArr_Click(object sender, MouseEventArgs e)
如果我将MouseEventArgs更改为EventArgs,错误就会消失,但这将不再起作用:
if (e.Button == MouseButtons.Left)
有什么想法吗?非常感谢所有的帮助。
Label
上Click
事件的签名(在 Control
中定义)为:
public event EventHandler Click;
所以不需要MouseEventArgs
,只需要EventArgs
。
您应该查看MouseDown
事件。
接收 MouseEventArgs 作为第二个参数的事件不是 Click 事件,
而是鼠标向下。以这种方式更改代码(此外,为了提高可读性,请在 pnlArr_MouseDown 中重命名事件处理程序)
lblArr[i, j].MouseDown += pnlArr_Click;
您可以将有效模式与EventArgs
一起使用并利用
控件.鼠标按钮
或利用MouseDown
事件。