DataGridView를 보유하는 Form이 있고,이 Form은 다른 DataGridView 만 보유하는 보이지 않는 Form을로드합니다. 두 번째 DGV는 첫 번째 DGV의 항목에 대한 자세한 정보를 표시하는 데 사용됩니다.DataGridView 외부에서 클릭 할 때 폼을 숨기기
두 번째 DGV는 사용자가 첫 번째 DGV에서 임의의 행의 7 번째 셀 내부를 클릭 할 때만 표시되어야합니다. 나는 다른 셀을 클릭 할 때 숨길 수 있도록 이미 관리했지만 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으로 고정되어 있다고 가정 해 봅시다. datarows의 수에 따라, DataGridview 컨트롤 안에 빈 공간이있을 수 있습니다. 이 빈 공간을 클릭하면 표가 사라지지 않습니다. – LeonidasFett
이것이 전체적으로 적용 가능한 솔루션이라는 것은 아닙니다. 화면의 각 단일 픽셀을 고려하려면 다양한 이벤트를 많이 사용해야합니다. 결과 프로그램이 꽤 신뢰할 수 없게 될 수도 있습니다. 이러한 종류의 문제로, 가능한 최악의 상황에 처한 것이 아니라 가장 편안하고 사용자 친화적 인 케이스에 자신을 집어 넣으십시오. 사용자는 모든 것을 직관적으로 처리하고 인터페이스를 이러한 사실을 염두에두고 설계하십시오. – varocarbas
의견을 보내 주시면 감사하겠습니다. 전체 그리드를 formsize로 크기를 정하는 대신, 필자는 자동 크기 조정을 패널에 적용하여 차례대로 크기를 폼 크기로 조정했습니다. Panel_Click 이벤트로 이제 두 번째 폼을 숨길 수 있습니다. – LeonidasFett