DataGridView: FullRowSelect и Focus - PullRequest
       11

DataGridView: FullRowSelect и Focus

0 голосов
/ 30 апреля 2009

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

РЕДАКТИРОВАТЬ: Для уточнения; я хочу снова включить пунктирную линию и / или синий фон в выбранной строке / ячейках. Похоже, код, который я сейчас как-то отключаю, это ...

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

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;
}

Ответы [ 2 ]

2 голосов
/ 30 апреля 2009

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

Полагаю, вы можете назвать это так:

optionsBannersDataGridView.OnCellClick += new DataGridViewCellEventArgs(optionsBannersDataGridView_OnCellClick);
0 голосов
/ 05 мая 2009

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

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

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

Свойства устанавливаются вместо этого в графическом интерфейсе Visual Studio. Параметр SelectionMode имеет значение FullRowSelect, а MultiSelect - значение false.

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

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

...