即使单元格上有图片框,如何仍然能够单击 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 的右侧单元格上,当单击此单元格时,我会显示提供 Yes
和 No
选项(即我在初始化时创建的)的组合框。
如果单击 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;
}
我有一个显示生产过程的 dataGridView。在名为 Is Roll Ready
的 dataGridView 的右侧单元格上,当单击此单元格时,我会显示提供 Yes
和 No
选项(即我在初始化时创建的)的组合框。
如果单击 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;
}