Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取已单击的PictureBox的数量?_C# - Fatal编程技术网

C# 如何获取已单击的PictureBox的数量?

C# 如何获取已单击的PictureBox的数量?,c#,C#,我做了一个井字游戏,我有9个单元格,玩家可以点击。最初,单元格没有任何图片,但单击单元格时,其图片必须更改。如何在没有代码重复的情况下为每个单元格创建此事件 单击事件的签名有一个“发件人”对象。你可以参考一下。将其强制转换为适当的类型,您可以直接访问其所有公共属性 您应该能够执行以下操作: protected void pictureClick(Object sender, EventArgs e) { PictureBox pic = sender as PictureBox;

我做了一个井字游戏,我有9个单元格,玩家可以点击。最初,单元格没有任何图片,但单击单元格时,其图片必须更改。如何在没有代码重复的情况下为每个单元格创建此事件

单击事件的签名有一个“发件人”对象。你可以参考一下。将其强制转换为适当的类型,您可以直接访问其所有公共属性

您应该能够执行以下操作:

protected void pictureClick(Object sender, EventArgs e) {
    PictureBox pic = sender as PictureBox;

    if (pic != null) {
        // set the image based on which players turn it is.
    } 
}
现在,每个图片框都将其onClick事件设置为这个pictureClick函数

---编辑---


我还要补充一点,以这种方式使用独立的UI控件对于大型平铺游戏来说效率极低。对于3x3 tic-tac-toe网格,这可能没问题,但对于8x8棋盘之类的东西,所有64个方块的刷新时间都会很明显,因为页面上的每个UI组件都有其在窗口刷新时调用的Paint()方法。我是根据这里的经验说的。我曾经尝试使用这种方法,使用10x10个面板组件组成的网格,并根据游戏状态数据使用自定义绘制方法,每当调整窗口大小时,游戏都会挂起几秒钟,而所有内容都会刷新。

事件处理程序可以分配给任意数量的对象。只需重新使用事件处理程序--
sender
参数告诉您是哪个对象引发了事件。MVC、WCF、Webforms、Windows forms、Xamarin您在使用什么技术?我应该使用什么来代替它们?@Wadim我不知道这是否是标准(这是几年前我刚刚涉足游戏设计的时候),但我最终为一个控件编写了自己的自定义渲染器,该控件一步绘制了整个电路板,而不是渲染几十个单独的控件。这需要做更多的工作,因为您基本上需要手动执行paint方法,但是它的工作速度要比依赖于在多个控件上调用paint()方法的速度快得多,而且需要额外的开销。