Вот такая проблема: если я выбираю ячейку, у которой номер столбца и строки совпадает, то после раскрытия ComboBox "теряется фокус" (фокус не теряется, конечно, но компонент сворачивается и отменяется событие EditingControlShowing) при любом действии мышью и, как следствие, не могу оперировать с его элементами. В аналогичных ячейках с другими индексами позиции такого не происходит и при раскрытии ComboBox я могу дальше выбирать элементы.
Вот при редактировании ячейки 1-ой строки все нормально, а при редактировании 5-ой у ячейки с индексом [5,5] проблемы:
Прилагаю код, отвечающий за данные действия:
/// <summary>
/// Событие клика по ячейке
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DGV_TrafficLights_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (DGV_TrafficLights.CurrentCell.OwningColumn.Name == "StartSignalColor")
{
// Делаем из TextBox-ячейки ComboBox-ячейку
DataGridViewComboBoxCell dgv_cb_SSCs = new DataGridViewComboBoxCell();
dgv_cb_SSCs.Items.Add(Color.Green);
dgv_cb_SSCs.Items.Add(Color.Red);
DGV_TrafficLights[e.ColumnIndex, e.RowIndex] = dgv_cb_SSCs;
}
}
/// <summary>
/// Событие при отведении указателя мыши от ячейки
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DGV_TrafficLights_CellMouseLeave(object sender, DataGridViewCellEventArgs e)
{
if (DGV_TrafficLights.CurrentCell.OwningColumn.Name == "StartSignalColor")
{
if (DGV_TrafficLights.CurrentCell is DataGridViewComboBoxCell)
{
DGV_TrafficLights[e.ColumnIndex, e.RowIndex] = new DataGridViewTextBoxCell
{
Value = DGV_TrafficLights.CurrentCell.Value
};
}
}
}
/// <summary>
/// Событие обработки ошибки данных
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DGV_TrafficLights_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
//MessageBox.Show("Ошибка данных (DataError)", "Ошибка");
}
/// <summary>
/// Событие отображение элемента управления для редактирования ячейки
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DGV_TrafficLights_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control is ComboBox cb_SSCs)
{
cb_SSCs.DrawMode = DrawMode.OwnerDrawFixed;
cb_SSCs.DrawItem -= CB_DrawItem;
cb_SSCs.DrawItem += new DrawItemEventHandler(CB_DrawItem);
cb_SSCs.SelectionChangeCommitted -= CB_SelectionChangeCommitted;
cb_SSCs.SelectionChangeCommitted += new EventHandler(CB_SelectionChangeCommitted);
}
}
/// <summary>
/// Событие прорисовки элемента комбобокса
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void CB_DrawItem(object sender, DrawItemEventArgs e)
{
if (sender is ComboBox cb)
{
using (SolidBrush signalColor = new SolidBrush((Color)cb.Items[e.Index]))
{
string signalName = signalColor.Color.Name;
e.Graphics.FillRectangle(signalColor, e.Bounds);
e.Graphics.DrawString(signalName, e.Font, Brushes.Black, e.Bounds);
}
}
}
/// <summary>
/// Событие после изменения значения у выбранного комбобокса
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void CB_SelectionChangeCommitted(object sender, EventArgs e)
{
if (sender is ComboBox cb)
{
if (DGV_TrafficLights.CurrentCell is DataGridViewComboBoxCell)
{
DGV_TrafficLights[DGV_TrafficLights.CurrentCell.ColumnIndex, DGV_TrafficLights.CurrentCell.RowIndex] = new DataGridViewTextBoxCell
{
Value = cb.Text
};
}
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
JSON файл содержит поле и три массиваПервые 2 массива описывают данные, последний массив содержит массивы с данными, каждый массив это один...
Нужен метод который будет отслеживать изменения в свойствах другого классаПодскажите, пожалуйста, как можно это реализовать или где об этом...
Пытаюсь достать из переменной $result_text ГОСТы, когда в переменной храню короткую строку в которую включён какой нибудь ГОСТ, preg_match_all находитИ...
У меня есть две таблицыВ одной таблице id пользователей, в другой id пользователей, которых функция рандома не должна вызвать