我有一个包含DataGridView的Form,这个Form也加载了一个不可见的Form,它只包含另一个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;
}
}
答案 0 :(得分:1)
private void Form1_Click(object sender, EventArgs e)
{
this.schedules.Visible = false;
}
用户倾向于点击他们看到的关闭弹出窗口的最大窗口。你也可以用二级表格做同样的事情;或者甚至添加一个关闭按钮。
答案 1 :(得分:1)
我认为您希望将Form Click和Grid Leave事件组合起来以使其正常工作。
private void Form1_Click(object sender, EventArgs e)
{
detailForm.Visible = false;
}
private void dataGridView1_Leave(object sender, EventArgs e)
{
detailForm.Visible = false;
}
现在,如果用户在表单上单击Grid外部或直接单击其他控件,则应隐藏您的详细信息表单。
希望它有所帮助。