У меня есть приложение для импорта некоторых изображений из папки в другую. Я использую 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;
            }

И я хочу знать, какой флажок установлен, чтобы я мог экспортировать изображение рядом с ним.

0
Sekioz detous 4 Фев 2022 в 16:06

3 ответа

Лучший ответ

Я предполагаю, что ящик с картинками будет иметь имя вроде:

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];
}

Так много способов снять шкуру с этого кота..

0
Caius Jard 4 Фев 2022 в 16:43

Измените свои методы, чтобы они ВОЗВРАЩАЛИ созданный элемент управления:

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

Теперь вы можете сохранить ссылку на этот CheckBox в свойстве Tag() PictureBox:

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 или нет.

0
Idle_Mind 4 Фев 2022 в 16:29
List<CheckBox> c = Controls.OfType<CheckBox>().Cast<CheckBox>().ToList();
forech(CheckBox item in c){
if(c.checked){
}
}
0
Salim Baskoy 4 Фев 2022 в 16:31