单击行时,如何更改运行表单中两点之间的线颜色

时间:2019-06-06 09:07:33

标签: c# winforms drawing gdi+

我在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

我希望在单击行时更改颜色

2 个答案:

答案 0 :(得分:0)

您已经绘制了带有点和线的木板。但是面板不会对用户的点击做出反应-当有人点击面板时,什么也不会发生。

现在,您还需要这些代码段

  1. 您需要一些代码来响应鼠标单击事件,当在面板上单击一次时,将执行这段代码,并检查鼠标单击是在特定行还是仅在特定行上。空白区域(在这种情况下,什么也不会发生)。您需要进行一些计算以确定鼠标单击是否在一行上。

  2. 您需要记住哪些行为红色,哪些行为黑色,哪些行保持为蓝色。因此,您可能需要一个二维整数数组来进行跟踪,例如0代表蓝色,1代表红色,2代表黑色。

  3. 每当检测到单击线条时,都需要重新粉刷木板,调用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 ..

  • 几何总是一个选择,但是线算法比预期的要难,尤其是当您需要舍入和松弛时。