2013-07-01 25 views
0

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

回答

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

用戶傾向於點擊他們看到關閉彈出窗口的最大窗口。你也可以對二級表格做同樣的事情;或者甚至添加一個關閉按鈕。

+0

這會工作,但只有一個小問題:比方說,我的主網格具有800x600的固定大小。取決於數據行的數量,datagridview控件內可能有空的空間。當我點擊這個空白區域時,網格不會消失 – LeonidasFett

+1

我並不是說這是一個全面適用的解決方案。如果你想考慮屏幕上的每一個像素,你將不得不依賴許多不同的事件;儘管由此產生的程序可能變得相當不可靠。有了這些問題,不要將自己置於最糟糕的情況下,只需將自己置於最舒適/用戶友好的情況下:用戶希望直觀地完成所有事情,並根據這一事實設計界面。 – varocarbas

+0

感謝您的評論給我帶來了一個想法。我沒有將整個網格大小設置爲表單大小,而是將其設置爲自動大小,並將其放入一個面板中,然後依次將其大小設置爲表單大小。通過Panel_Click事件,我現在可以隱藏第二個表單。 – LeonidasFett

1

我想你會想結合表單單擊和網格離開事件,使其工作。

​​

現在,如果用戶在窗體上單擊外部網格或直接在不同控件上單擊,則應隱藏您的詳細信息窗體。

希望它有幫助。