You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何引用运行时新建并添加的PictureBox控件?

运行时创建的PictureBox引用方法

直接使用this.pcb00这种方式不可行,因为这些PictureBox是运行时动态创建的,编译器在编译阶段无法识别这类未提前声明的控件名称,自然不能通过直接引用的方式访问。以下是几种实用的引用方案:

方法1:通过Controls.Find查找控件

利用窗体的Controls.Find方法,根据你设置的Name属性定位目标PictureBox:

// 查找名为pcb00的控件,第二个参数true表示递归查找所有子控件
var targetPcb = this.Controls.Find("pcb00", true).FirstOrDefault() as PictureBox;
if (targetPcb != null)
{
    targetPcb.BackColor = Color.Yellow;
}

方法2:用集合统一存储动态控件

在窗体类中声明一个集合,创建PictureBox时就将其加入集合,后续直接通过集合索引或键值对快速查找:

// 窗体类级别字段
private Dictionary<string, PictureBox> _mapPictureBoxes = new Dictionary<string, PictureBox>();

// 创建控件的循环逻辑中
var pcb = new PictureBox();
pcb.Name = "pcb" + i + j;
pcb.Margin = new Padding(0);
pcb.Size = new Size(slotSize, slotSize);
pcb.Location = new Point(i * slotSize, j * slotSize);
// ...颜色设置逻辑
this.Controls.Add(pcb);
// 将控件存入字典
_mapPictureBoxes.Add(pcb.Name, pcb);

// 后续引用目标控件
if (_mapPictureBoxes.ContainsKey("pcb00"))
{
    _mapPictureBoxes["pcb00"].BackColor = Color.Yellow;
}

方法3:创建时直接保存特定控件引用

如果只需要引用某个固定位置的PictureBox,可以在创建时直接将其赋值给类级别变量:

// 窗体类级别字段
private PictureBox _pcb00;

// 创建控件的循环逻辑中
var pcb = new PictureBox();
pcb.Name = "pcb" + i + j;
// ...属性设置逻辑
this.Controls.Add(pcb);
// 匹配到目标位置时保存引用
if (i == 0 && j == 0)
{
    _pcb00 = pcb;
}

// 后续直接使用变量
if (_pcb00 != null)
{
    _pcb00.BackColor = Color.Yellow;
}

内容的提问来源于stack exchange,提问作者Spell Cin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 13:31:00