gpt4 book ai didi

c# - 将鼠标点击位置转换为给定比例

转载 作者:太空宇宙 更新时间:2023-11-03 13:42:06 26 4
gpt4 key购买 nike

这是我要解决的问题:

You have a screen that display heart rate (of 1 hour - 60 minutes), How do you can to know which minute you are in, upon click on the screen? When you clicked on the screen you will get specific height and width.

这就是我所做的:我创建了一个表单,并在该表单上停靠了 PictureBox 对象。 PictureBox 对象有一个通过单击 PictureBox 对象调用的方法。方法:

private void pictureBox1_Click(object sender, EventArgs e)
{
var mouseEventArgs = e as MouseEventArgs;
if (mouseEventArgs != null)
{
int widthPerMinute = (int)(mouseEventArgs.X / ((pictureBox1.Width + 1) / 60.0));
MessageBox.Show((widthPerMinute).ToString());
}
}

有没有更优雅的解决方案?

最佳答案

我很确定我误解了您对我的第一个答复的要求(我将其留在本答复的末尾以供引用)。

我现在认为您要求对您正在做的事情进行更高层次的设计。

如果您打算进一步开发心率图表显示,那么您可能想要为其编写您自己的自定义 Control 而不是仅仅使用 PictureBox。这样您就可以将所有绘图逻辑很好地封装在其实现中。

不过,这需要大量的学习。如果您认为您将来可能需要写更多内容,那是值得的。

MSDN介绍在这里:http://msdn.microsoft.com/en-us/library/bs3yhkh7%28v=vs.110%29.aspx

但从它的声音来看,这是一个面试问题或其他问题,在这种情况下,您可能不想花这么多时间在上面。 ;)


我之前的回答:

我不会说有更“优雅”的方法,但我想您可以通过将计算分钟的逻辑提取到一个单独的方法中来使代码更具可读性:

int minuteAtPictureBoxCoord(int x)
{
double totalMinutes = 60;
double minutesPerPixel = totalMinutes/(pictureBox1.Width+1);
int minute = (int)(x*minutesPerPixel);
return minute;
}

这显然要长很多,但可以说更容易看出代码是否正确。 (尽管我不完全确定 pictureBox1.Width+1 上的 +1 - 我不确定那是否正确;我从您的原始代码中复制了它。)

它还简化了调用站点:

private void pictureBox1_Click(object sender, EventArgs e)
{
var mouseEventArgs = e as MouseEventArgs;
if (mouseEventArgs != null)
{
int minute = minuteAtPictureBoxCoord(mouseEventArgs.X);
MessageBox.Show(minute.ToString());
}
}

我认为一眼就能看出代码的作用要容易一些。

此外,如果您更改屏幕上显示的分钟数等内容,或者如果您有多行心率数据(那么您需要 X 一个Y客户端坐标)。

还有一件事:您可能应该使用 PictureBox.MouseClick而不仅仅是 Click()。这样您实际上就获得了 MouseEventArgs 的传递,因此您无需进行强制转换。所以它会变成:

private void pictureBox1_MouseClick(object sender, mouseEventArgs e)
{
int minute = minuteAtPictureBoxCoord(e.X);
MessageBox.Show(minute.ToString());
}

关于c# - 将鼠标点击位置转换为给定比例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16624459/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com