У меня есть форма, содержащая элемент управления DataGridView с именем gridParameters. Я добавляю элемент управления поверх него на основе некоторых значений, чтобы добавить элементы управления, которые недоступны (например, DateTimePicker):
DateTimePicker dtp = new DateTimePicker();
gridParameters.Controls.Add(dtp);
dtp.Location = rowCellLocation;
dtp.Size = rowCellSize;
dtp.CustomFormat = "yyyy/MM/dd";
dtp.Format = DateTimePickerFormat.Custom;
dtp.Tag = rowId;
dtp.ValueChanged += dtp_SelectedValueChanged;
dtp.Visible = true;
Этот код находится внутри цикла, который перебирает строки сетки и находится в операторе If (я добавляю DateTimePicker для некоторых строк и NumericUpDown для других на основе значения ячейки строки). Переменные rowCellLocation, rowCellSize и rowId устанавливаются в цикле для каждой строки.
Мой режим выбора DataGridView — это полный выбор строки. Я хочу, чтобы добавленный элемент управления (DateTimePicker, NumericUpDown...) получал фокус, когда я переключаюсь на строку, например, когда я щелкаю строку мышью.
Для этого я пробовал следующее: в цикле, создающем элементы управления, я устанавливал элемент управления в соответствующее свойство Tag строки. В событии сетки Row_Enter (я также пробовал CurrentCellChanged) я добавил следующий код:
if (gridParameters.CurrentRow.Tag != null)
{
((Control)gridParameters.CurrentRow.Tag).Focus();
}
Я также пробовал использовать Select(), а также
this.ActiveControl = (Control)gridParameters.CurrentRow.Tag;
Ни одно из вышеперечисленных не устанавливает фокус на элемент управления.
Я ставлю точку останова, и код доходит до этой строки, свойство Tag содержит элемент управления, на который нужно сфокусироваться, и выполняю его, но я не могу заставить элемент управления сфокусироваться.
ОБНОВЛЕНИЕ: установка фокуса на другой элемент управления за пределами DataGridView работает просто отлично (например, установка фокуса на кнопку «ОК» работает) .
enum {Date, Num}
), затем просто установите для этого свойства необходимое значение для каждой ячейки. Ячейка будет рисовать себя каким-то изображением? это выглядит как требуемый контроль (может быть, есть более простой и лучший способ?). И при щелчке по ячейке вы добавите реальный контроль, как в c-sharpcorner.com/UploadFile/0f68f2/ в зависимости от значения. - person Eugene Podskal   schedule 30.05.2015