DataGridView: FullRowSelect и фокус

У меня есть DataGridView в модальном окне со списком опций для моей программы. Сетка состоит из двух столбцов. Первый содержит флажок для выбора этой опции, вторая — это имя/описание этой опции. Winform также содержит кнопки «ОК» и «Отмена», но это не относится к делу. Код ниже делает то, что я хочу. Из-за свойства FullRowSelect флажок установлен/снят, когда вы щелкаете в любом месте этой строки. Однако он больше не показывает синий фон или пунктирную линию вокруг текущей строки. Как я могу добавить это, не теряя ни одной из текущих функций?

EDIT: Чтобы уточнить; я хочу еще раз включить пунктирную линию и/или синий фон в выбранной строке/ячейках. Похоже, код, который у меня есть сейчас, каким-то образом отключает это...

Соответствующий текущий код:

public OptionsForm()
{
    InitializeComponent();
    OptionsRoot = Options.GetReadOnlyRoot(OptionsBannersNameValueList.GetNameValueList(Settings.Default.OptionsBanners));
    optionsBannersDataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
    optionsBannersDataGridView.MultiSelect = false;
    optionsBannersDataGridView.RowPrePaint += new DataGridViewRowPrePaintEventHandler(optionsBannersDataGridView_RowPrePaint);
    InitUI();
    Closing += MyFormClosing;
    BindingSourceTree = BindingSourceHelper.InitializeBindingSourceTree(components, rootBindingSource);
}

private void optionsBannersDataGridView_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{
    e.PaintParts &= ~DataGridViewPaintParts.Focus;
}

person Sakkle    schedule 30.04.2009    source источник


Ответы (2)


Я бы попробовал использовать .OnCellClick и установите синий цвет строки. Я думаю, вы также можете добавить пунктирную рамку.

Я считаю, что вы можете назвать это так:

optionsBannersDataGridView.OnCellClick += new DataGridViewCellEventArgs(optionsBannersDataGridView_OnCellClick);
person Jared Harley    schedule 30.04.2009
comment
Будет ли это гарантировать, что верхняя строка будет синей во время загрузки? - person Sakkle; 30.04.2009
comment
Я не только хочу, чтобы это произошло наCellClick. Текущая строка всегда должна быть выделена/окрашена. Это то, что я пытаюсь сделать... - person Sakkle; 30.04.2009
comment
Я прав, думая, что вы хотите, чтобы каждая проверенная строка имела синий фон? - person Jared Harley; 01.05.2009

Что я, наконец, сделал, так это удалил большую часть кода, упомянутого выше, так как это действительно мало что сделало. по какой-то причине, когда я устанавливал свойства в Visual Studio, это не сработало, а теперь работает. Я не знаю, что там произошло, но это не относится к делу.

Теперь конструктор выглядит так:

public OptionsForm()
    {
        InitializeComponent();
        AlternativerRoot = Alternativer.GetReadOnlyRoot(AlternativerFanerNameValueList.GetNameValueList(Settings.Default.AlternativerFaner));
        InitUI();
        Closing += MyFormClosing;
        _bindingSourceTree = BindingSourceHelper.InitializeBindingSourceTree(components, rootBindingSource);
    }

Вместо этого свойства устанавливаются в графическом интерфейсе визуальной студии. Для SelectionMode установлено значение FullRowSelect, а для MultiSelect установлено значение false.

Я все еще не получил желаемого фокуса, поэтому я установил синий цвет фона выбранной строки, а белый цвет переднего цвета в Visual Studio. Теперь это работает так, как я хотел.

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

person Sakkle    schedule 05.05.2009