作为一名新的C#程序员,我有许多问题需要解决,特别是这个问题涉及到MouseEventArgs e及其与MouseButtons.Left的交互似乎不兼容,
我可能对MouseEventArgs的真正功能或用法缺乏了解,这是导致此问题的原因。
有人能解释一下为什么我的尝试是不正确的吗?正确的解决方案是什么?以及我如何才能防止将来遇到类似的问题?
private void BtnSize_MouseDown(object sender, MouseEventArgs e)
{
// Issue exists here, e == MouseButtons.Left does not work
// why? Isn't the purpose of MouseEventArgs e to track the
// mouse input (aka left click?)
if (e == MouseButtons.Left)
{
// clear canvas
Ball.Loading = true;
while (ballsAdded < 25 && ballsRemoved < 1000)
{
Ball newBall = new Ball(ballRadiusSet);
// Contains bool will force balls to spawn apart from one another
if (!soManyBalls.Contains(newBall))
{
soManyBalls.Add(newBall);
ballsAdded++;
}
else
{
ballsRemoved++;
}
}
foreach (Ball listBall in soManyBalls)
{
listBall.AddBall();
}
// render canvas
Ball.Loading = false;
Text = $"Loaded {ballsAdded} distinct balls with {ballsRemoved} discards";
ballsAdded = 0;
ballsRemoved = 0;
}
if (e == MouseButtons.Right)
{
// clear canvas
Ball.Loading = true;
while (ballsAdded < 25 && ballsRemoved < 1000)
{
Ball newBall = new Ball(ballRadiusSet);
// Invert Contains bool so balls form directly connected to one another
if (soManyBalls.Contains(newBall))
{
soManyBalls.Add(newBall);
ballsAdded++;
}
else
{
ballsRemoved++;
}
}
foreach (Ball listBall in soManyBalls)
{
listBall.AddBall();
}
// render canvas
Ball.Loading = false;
Text = $"Loaded {ballsAdded} distinct balls with {ballsRemoved} discards";
ballsAdded = 0;
ballsRemoved = 0;
}
}
2条答案
按热度按时间zpqajqem1#
除了比较
MouseButtons.Left
与事件本身(e == MouseButtons.Lef
)之外,您可以使用包含相关鼠标器按钮之事件的属性:MouseEventArgs
不仅包含按下的按钮,而且包含关于鼠标事件的其它信息,例如位置。请注意
Button
属性包含了所有按下按钮的信息。因此,例如,如果左按钮和右按钮都被单击,但您只想检查左按钮,则必须比较位模式,例如:如果左键与其他按钮一起被单击,上述条件也将评估为true。
iih3973s2#
参数
e
是MouseEventArgs类型的对象。MouseButtons.Left
是MouseButtons
类型的枚举字段。此枚举字段永远不等于MouseEventArgs类型的对象。此等式将始终返回false。
如果检查MouseEventArgs的定义,您会发现它有一个MouseEventArgs.Button属性。此属性的类型为MouseButtons。以下代码可能有效:
警告!MouseButtons是具有flags属性的枚举。这意味着该值可以是多个枚举值的组合。如果操作员同时按下左右按钮,则该值将为:
MouseButtons.Left | MouseButtons.Right
。因此,语句if (e.Button == MouseButtons.Left)
将返回false。您必须检查要求,如果操作员按下两个按钮,该如何React?忽略右侧按钮,就像只按下左侧按钮一样?
如果只按下左按钮,但同时按下左按钮和其他按钮,则返回true