我有一个包含 DataGridView 的表单,这个表单还加载了一个只包含另一个 DataGridView 的不可见表单。第二个 DGV 用于显示有关第一个 DGV 中项目的更多信息。
只有当用户在第一个 DGV 中任意行的第 7 个单元格内单击时,才应显示第二个 DGV。当我单击其他单元格时,我已经设法让它隐藏起来,但是当我在 DataGridView 之外单击时,我似乎无法让它隐藏起来。我已经尝试过 Leave、RowLeave 和 LostFocus 事件,但均未成功。我认为这是因为一旦显示第二个 DataGridView,它就会获得焦点,这会以某种方式与事件混淆。
这是我的代码:
public class Form1
{
Form schedules = new Form();
DataGridView backups = new DataGridView();
public Form1()
{
this.schedules.Visible = false;
backups.DataBind();
}
private void backups_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex != -1 && e.ColumnIndex == 7)
{
if (this.schedules.getData(Convert.ToInt32(backups.Rows[e.RowIndex].Cells[0].Value)))
{
this.schedules.Owner = this;
this.schedules.Visible = true;
this.schedules.changePosition(Cursor.Position);
}
else
{
this.schedules.Visible = false;
}
}
else
{
this.schedules.Visible = false;
}
}
}
public class Schedules : Form
{
DataGridView grdSchedules = new DataGridView();
public Schedules()
{
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Visible = false;
this.AutoSize = true;
this.grdSchedules.RowHeadersVisible = false;
this.grdSchedules.AllowUserToAddRows = false;
this.grdSchedules.ScrollBars = ScrollBars.None;
this.grdSchedules.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
this.grdSchedules.AllowUserToResizeColumns = false;
this.grdSchedules.AllowUserToResizeRows = false;
this.grdSchedules.AllowUserToDeleteRows = false;
}
}