即使单元格上有图片框,如何仍然能够单击 dataGridView 的单元格?

How to still be able to click on the cell of dataGridView even when you have a picturebox on the cell?

我有一个显示生产过程的 dataGridView。在名为 Is Roll Ready 的 dataGridView 的右侧单元格上,当单击此单元格时,我会显示提供 YesNo 选项(即我在初始化时创建的)的组合框。

如果单击 Yes,我将创建一个带有勾号图像的图片框,如果单击 No,我将创建一个带有十字图标的图片框,如下所示:

单击单元格后,我将我的全局 PictureBox picture 分配给添加到单击单元格的 pictureBox,然后我利用 pictureBox 的 Click() 事件制作组合框单击 pictureBox(因此是单元格)时可见。下面是我的 CellClick 数据网格视图事件:

  private void CompletedMachines_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == -1) return;
            if (CompletedMachines.Columns[e.ColumnIndex].Name.CompareTo("MachineNr2") != 0 && CompletedMachines.Columns[e.ColumnIndex].Name.CompareTo("TimePassedSince") != 0 &&
                 CompletedMachines.Columns[e.ColumnIndex].Name.CompareTo("NrOfLinesPerCm2") != 0 && e.RowIndex > -1 && CompletedMachines.Columns[e.ColumnIndex].Name.CompareTo("HeightOfLamallae2") != 0)
            {
                
                PictureBox pictureBox = new PictureBox();
                picture = pictureBox; //assign the newly created pictureBox to the global one              CompletedMachines.Controls.Add(pictureBox);
                cellRect = CompletedMachines.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true);
                comboBox.Size = new Size(cellRect.Width, cellRect.Height);
                comboBox.Location = new Point(cellRect.X, cellRect.Y);
                comboBox.Visible = true;
                pictureBox.Size = new Size(cellRect.Width, cellRect.Height);
                pictureBox.Location = new Point(cellRect.X, cellRect.Y);
                pictureBox.SizeMode = PictureBoxSizeMode.Zoom;
                pictureBox.Click += PictureBox_Click; //call the Click event
            }
        }

图片盒子Click事件:

   private void PictureBox_Click(object sender, EventArgs e)
        {
            
            comboBox.Visible = true;
        }

但是,当我在 dataGridView 中有多行时,每次调用此 PictureBox_Click 事件时,组合框都会出现在拥有最新添加的图片框的单元格上。这是因为我将全局图片框picture分配给了最新添加的

即使在单元格上添加了自定义控件,是否仍然可以使用 dataGridView 的 CellClick 事件,这样我就不必使用 PictureBox_Click 事件了?或者其他方式?

提前致谢!

在 PictureBox.Tag 中添加对 ComboBox 的引用。

// When creating PictureBox
pictureBox.Tag = comboBox;

然后在事件处理程序中使用sender获取图片框和组合框:

private void PictureBox_Click(object sender, EventArgs e)
{
  var comboBox = (ComboBox)((PictureBox)sender).Tag;          
  comboBox.Visible = true;
}