У меня есть форма, которая содержит 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. в зависимости от количества datarows, внутри элемента управления datagridview может быть пустое пространство. когда я нажимаю это пустое место, сетка не исчезает – LeonidasFett
Я не говорю, что это общее применимое решение. Если вы хотите учесть каждый отдельный пиксель на экране, вам придется полагаться на множество разных событий; хотя полученная программа может стать довольно ненадежной. При таких проблемах, а не в том, чтобы оказаться в худшем сценарии, просто поставьте себя в самый удобный/удобный случай: пользователи хотят, чтобы все было сделано интуитивно, дизайн вашего интерфейса с учетом этого факта. – varocarbas
благодаря вашему комментарию привел меня к идее. вместо того, чтобы выровнять всю сетку до формы, я настроил ее на автоматизацию и поместил ее в панель, которую я, в свою очередь, сделал размером с formize. с событием Panel_Click, теперь я могу скрыть вторую форму. – LeonidasFett