Как добавить более одного изображения в DataGridViewImageColoumn и добавить событие для каждого изображения в окнах форм
Мне нужно добавить более одного изображения (three images
) чтобы Data Grid View
столбец изображений, но столбец изображений по умолчанию не позволяет мне устанавливать более одного изображения. И мне нужно прикрепить отдельное событие к каждому изображению.
Поскольку я новичок в программировании, пожалуйста, помогите мне. Спасибо!
Вот мой код для добавления столбца изображения в Data Grid View
и инициализировать image coloumn
:
DataGridViewImageColumn dgColMemos = new DataGridViewImageColumn();
Инициализация столбцов (я не включаю весь код):
this.dgPartslist[sColName, iRowIndex].Value = (Image)Properties.Resources.Memo_Image;
1 ответ
Наиболее гибкое решение для хранения данных в месте, которое не позволяет хранить много предметов, но предлагает Tag
стоит создать подходящий класс:
class ImagesTag
{
public Image Img1 { get; set; }
public Image Img2 { get; set; }
public Image Img3 { get; set; }
public int CurrentImg { get; set; }
public ImagesTag(Image i1, Image i2, Image i3)
{ CurrentImg = 0; Img1 = i1; Img2 = i2; Img3 = i3; }
}
Теперь вы можете добавить экземпляр к каждому ImageCell's Tag
в дополнение к настройке самого изображения; здесь я установил 3 ряда:
DataGridViewImageColumn dgColMemos = new DataGridViewImageColumn();
dataGridView1.Columns.Add(dgColMemos);
dataGridView1.RowCount = 3;
for (Int16 r = 0; r < dataGridView1.RowCount; r++)
{
ImagesTag I3 = new ImagesTag(imageList2.Images[r * 3],
imageList2.Images[r * 3 + 1], imageList2.Images[r * 3 + 2]);
dataGridView1[0, r].Value = I3.Img1;
dataGridView1[0, r].Tag = I3;
}
Обратите внимание, что я не получаю доступ к ресурсам, но ImageList
для моих тестов. Ваш установочный код будет сильно отличаться!
Я установил первый Image
чтобы отобразить и поместить этот индекс в классе, а также. Это потому, что трудно или даже невозможно без изучения пикселей определить, какое изображение отображается в данный момент.
Вот пример поворота трех изображений на MouseClick
:
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
ImagesTag I3 = (ImagesTag)(dataGridView1[e.ColumnIndex, e.RowIndex].Tag);
int current = (int)(I3.CurrentImg);
int next = ++current % 3;
dataGridView1[0, e.RowIndex].Value = next == 0 ? I3.Img1 : next == 1 ? I3.Img2 : I3.Img3;
I3.CurrentImg = next;
dataGridView1[0, e.RowIndex].Tag = I3;
}
Конечно, вы можете адаптировать дизайн класса к вашим потребностям; Вы можете заменить 3 жестко закодированных изображения List<Image>
, вы можете добавлять события / делегаты для вызова при нажатии, добавлять тексты для отображения в виде всплывающих подсказок и т. д.