如何检查动态复选框是否被选中

How to check if dynamic checkbox are checked

我有一个应用程序可以将一些图片从一个文件夹导入到另一个文件夹。我使用 picturebox 来显示我的图片,旁边有一个复选框。如果未选中,我不想导入它们。

所以这是我创建复选框的代码:

        public void CreateCheckBox(Form formInstance,int yLocation, int xLocation, int iNumber)
        {
            CheckBox box = new CheckBox();
            box.Name = "cbxName" + iNumber.ToString();
            box.Location = new Point(xLocation+40,yLocation+90);
            box.Visible = true;
            box.Enabled = true;
            box.Checked = true;
            box.CheckedChanged += new EventHandler(cbx_CheckedChange);
            formInstance.Controls.Add(box);
        }

还有我的图片框:

 public void CreatePictureBox(Form formInstance,int iNumber)
        {
            string[] tNomImage = RecupererNomImage();
            PictureBox pbxImage = new PictureBox();
            pbxImage.Name = "pbxName" + iNumber.ToString();
            pbxImage.Image = Image.FromFile(tNomImage[iNumber]);
            pbxImage.Width = 90;
            pbxImage.Height = 90;
            pbxImage.Location = new Point(iXLocation, iYLocation);
            pbxImage.Visible = true;
            pbxImage.BorderStyle = BorderStyle.FixedSingle;
            pbxImage.SizeMode = PictureBoxSizeMode.Zoom; 
            formInstance.Controls.Add(pbxImage);
            pbxImage.Enabled = false;
            CreateCheckBox(this, iYLocation, iXLocation, iNumber);
            if (iXLocation+iXSpacing*2 > this.Width)
            {
                iXLocation = XLOCATION;
                iYLocation += iXSpacing;
            }
            else
            {
                iXLocation += iXSpacing;
            }

我想知道选中了哪个复选框,以便导出旁边的图片。

更改您的方法,使它们 RETURN 创建的控件:

public CheckBox CreateCheckBox(Form formInstance,int yLocation, int xLocation, int iNumber)
{
    // ... existing code ...
    return box;
}

现在您可以在 PictureBox 的 Tag() 属性 中存储对该 CheckBox 的引用:

public PictureBox CreatePictureBox(Form formInstance,int iNumber)
{
    // ... existing code ...

    CheckBox cb = CreateCheckBox(this, iYLocation, iXLocation, iNumber);
    pbxImage.Tag = cb;

    // ... existing code ...

    return pbxImage;
}

最后,将所有返回的 PictureBox 添加到 List<PictureBox>,这样您就可以轻松地引用和迭代它们。只需将存储在 Tag() 属性 中的控件转换回 CheckBox,您就可以确定是否应导入每个 PictureBox。

List<CheckBox> c = Controls.OfType<CheckBox>().Cast<CheckBox>().ToList();
forech(CheckBox item in c){
if(c.checked){
}
}

我假设图片框的名称如下:

pbxName141

其匹配复选框的名称如下:

cbxName141

您可以要求所有复选框的表格:

var cbs = formInstance.Controls.OfType<CheckBox>().Where(cb => cb.Checked);

您可以将复选框名称转换为相关的图片框名称,并通过名称查找图片框:

foreach(var cb in cbs){
  var pbName = "p" + cb.Name.Substring(1);
  var pb = formInstance.Controls[pbName];
}

给这只猫剥皮的方法太多了..