0

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

2 回答 2

1
private void Form1_Click(object sender, EventArgs e)
{
    this.schedules.Visible = false;
}

用户倾向于点击他们看到的最大窗口来关闭弹出窗口。您也可以对辅助表单执行相同的操作;甚至添加一个关闭按钮。

于 2013-07-01T11:29:41.950 回答
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 外部单击或直接单击不同的控件,则应隐藏您的详细表单。

希望能帮助到你。

于 2013-07-01T11:38:42.880 回答