在DataGridView外部单击时隐藏表单

时间:2013-07-01 11:12:34

标签: c# forms events visibility

我有一个包含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;
    }
}

2 个答案:

答案 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外部或直接单击其他控件,则应隐藏您的详细信息表单。

希望它有所帮助。