我有一個包含DataGridView的窗體,此窗體還會加載一個不可見的窗體,該窗體只保存另一個DataGridView。第二個DGV用於顯示有關第一個DGV中項目的更多信息。在DataGridView之外單擊時隱藏窗體
僅當用戶在第一個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;
}
}
這會工作,但只有一個小問題:比方說,我的主網格具有800x600的固定大小。取決於數據行的數量,datagridview控件內可能有空的空間。當我點擊這個空白區域時,網格不會消失 – LeonidasFett
我並不是說這是一個全面適用的解決方案。如果你想考慮屏幕上的每一個像素,你將不得不依賴許多不同的事件;儘管由此產生的程序可能變得相當不可靠。有了這些問題,不要將自己置於最糟糕的情況下,只需將自己置於最舒適/用戶友好的情況下:用戶希望直觀地完成所有事情,並根據這一事實設計界面。 – varocarbas
感謝您的評論給我帶來了一個想法。我沒有將整個網格大小設置爲表單大小,而是將其設置爲自動大小,並將其放入一個面板中,然後依次將其大小設置爲表單大小。通過Panel_Click事件,我現在可以隱藏第二個表單。 – LeonidasFett