C # ComboBox определение размера и размещение в DataGridViewComboBoxColumn - PullRequest
1 голос
/ 03 декабря 2009

Проблема : у моего DataGridView есть высокие ячейки из-за некоторых изображений в предыдущих столбцах. Таким образом, столбец ComboBox показывает разброс ComboBox по всей высоте (и ширине) каждой ячейки, что выглядит неприемлемо.

Вопрос : Есть ли способ установить размер и расположение ComboBox так, чтобы он центрировался в каждой ячейке и сохранял свой размер по умолчанию?

Примечание . Из поиска в Google можно понять, что это возможно при создании собственного настраиваемого столбца для размещения ComboBox и переопределения события рисования, но перед тем, как идти по этому пути, я хочу убедиться единственный способ.

Ответы [ 2 ]

2 голосов
/ 03 декабря 2009

@ mlsteeves, спасибо за указание на событие CellPainting. Я не знаю, как мне удалось пропустить это. Но вот что я собираюсь сделать сейчас, похоже, дает результат, который я искал:

void DataGridView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
    if (e.RowIndex >= 0 && e.ColumnIndex == ComboBoxColumnIndex)
    {
        ComboBox comboBox = this.DataGridView.Controls["ColumnComboBox" + e.RowIndex] as ComboBox;
        if (comboBox == null)
        {
            comboBox = this.GetNewComboBox(e.RowIndex);
            comboBox.Name = "ColumnComboBox" + e.RowIndex;
            this.DataGridView.Controls.Add(comboBox);
        }

        if (comboBox != null)
        {
            comboBox.Width = e.CellBounds.Width - 10;
            comboBox.Left = e.CellBounds.Left + ((e.CellBounds.Width - comboBox.Width) / 2);
            comboBox.Top = e.CellBounds.Top + ((e.CellBounds.Height - comboBox.Height) / 2);
        }
    }
}
1 голос
/ 03 декабря 2009

Я только что воссоздал твою проблему, и должен признать, это отстой! :)

Один из способов обойти это - перейти в свойства вашего столбца ComboBox и изменить Display Style на Nothing.

Это приведет к отображению только выделенного текста, когда ячейка не редактируется, ComboBox не будет отображаться, пока вы не отредактируете ячейку.

Когда ваша строка становится выше, вы можете изменить DefaultCellStyle, чтобы Alignment было установлено на Top Left.

Если вы хотите, чтобы ComboBox отображался, когда ячейка не редактируется, посмотрите на событие CellPainting , оно позволяет вам настроить внешний вид ячейки. Это может позволить вам нарисовать ваш ComboBox на вашей ячейке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...