单击WinForm形状

时间:2017-06-21 16:41:02

标签: c# winforms

我在表单中心绘制了一个_radius = 50像素的圆圈:

g.FillEllipse(Brushes.Red, this.ClientRectangle.Width / 2 - _radius / 2, this.ClientRectangle.Height / 2 - _radius / 2, _radius, _radius);

现在我想检查用户是否点击了表单。

if (e.Button == MouseButtons.Left)
{
    int w = this.ClientRectangle.Width;
    int h = this.ClientRectangle.Height;

    double distance = Math.Sqrt((w/2 - e.Location.X) ^ 2 + (h/2 - e.Location.Y) ^ 2);
    ....

 if (distance <_radius)
    return true;
 else
    return false;
}

现在我结束了错误的价值观。例如,如果我点击圆的边缘,我有时会得到~10或NaN的距离。我在这里做错了什么?

1 个答案:

答案 0 :(得分:3)

  1. 你正在执行整数除法,它比浮点除法更粗糙。
  2. ^不是“power-to”运算符it's the bitwise XOR operator,这可能不是您想要的。请改用Math.Powx*x
  3. 您只需执行return distance < _radius
  4. 即可简化最后一条语句

    试试这个:

    Single w = this.ClientRectangle.Width;
    Single h = this.ClientRectangle.Height;
    
    Single distanceX = w / 2f - e.Location.X;
    Single distanceY = h / 2f - e.Location.Y;
    
    Single distance = Math.Sqrt( distanceX  * distanceX + distanceY * distanceY );
    
    return distance < this._radius;
    

    (此代码不会更改有关圆圈位置的任何假设。)