我在Visual Studio中从事点盒游戏,在4行4列中制作点阵列,并在每两个点之间绘制线条,现在我想当player1单击一条线时,特定的线会改变颜色变为红色,player2在另一行上单击,将颜色更改为黑色。
library(dplyr)
df %>%
group_by(ID) %>%
filter(Year <= Year[which.max(Program == "yyy")])
# ID Program Year
# <fct> <fct> <int>
#1 ABC xxx 2000
#2 ABC yyy 2001
#3 DEF xxx 2000
#4 DEF zzz 2001
#5 DEF yyy 2002
我希望在单击行时更改颜色
答案 0 :(得分:0)
您已经绘制了带有点和线的木板。但是面板不会对用户的点击做出反应-当有人点击面板时,什么也不会发生。
现在,您还需要这些代码段
您需要一些代码来响应鼠标单击事件,当在面板上单击一次时,将执行这段代码,并检查鼠标单击是在特定行还是仅在特定行上。空白区域(在这种情况下,什么也不会发生)。您需要进行一些计算以确定鼠标单击是否在一行上。
您需要记住哪些行为红色,哪些行为黑色,哪些行保持为蓝色。因此,您可能需要一个二维整数数组来进行跟踪,例如0代表蓝色,1代表红色,2代表黑色。
每当检测到单击线条时,都需要重新粉刷木板,调用panel1.Invalidate()
强制重新粉刷,因此再次调用panel1_Paint
方法,您可以在其中绘制再次从头开始绘制具有正确颜色的木板,点和线(以及您在数组2中保留的信息)。请记住,以前的绘画没有留下任何东西,就像您擦除纸上的所有内容并再次绘制所有内容一样。
答案 1 :(得分:0)
即使使用DrawLine
或类似方法,绘制的像素也只是彩色像素,而不是线条或任何其他形状。
因此,您需要选择是否通过图形的几何来解决问题。
两个选项都可以根据需要以多种方式解决。
Here是一个示例,可让您收集线条并在单击它们时识别它们。
对于完全不同的方法,您可以将代码从简单地绘制到Panel
上更改为双向绘制代码:此外到Panel
表面绘制成Bitmap
。将其设置为ClientSize
的{{1}},并使用相同的命令但使用从该Panel
创建的Graphics
对象将其绘制。现在,您可以使用Bitmap
测试每个像素的颜色,并使用bitmap.GetPixel(x,y)
位置形成面板的e.X and e.Y
事件。
有关Draw onto control of into a bitmap
的更多信息确保同步MouseClick
代码!一种简单的方法是将代码移至函数drawStuff(Graphics g)并在Paint事件中对其调用两次:一次使用Paint
,一次使用e.Graphics
..