Domanda

Ho un DataGridView in una finestra modale con un elenco di opzioni per il mio programma. La griglia ha due colonne. Il primo contiene una casella di controllo per la selezione di tale opzione, il secondo è il nome / descrizione di tale opzione. Il winform contiene anche i pulsanti OK e Annulla, ma non è questo il punto. Il codice qui sotto fa quello che voglio. A causa della proprietà FullRowSelect, la casella di controllo è selezionata / deselezionata facendo clic ovunque in quella riga. Tuttavia, non mostra più uno sfondo blu o una linea tratteggiata attorno alla riga corrente. Come potrei aggiungere questo senza perdere nessuna delle funzionalità attuali?

EDIT: da elaborare; quello che voglio è abilitare ancora una volta la linea tratteggiata e / o lo sfondo blu sulla riga / celle selezionate. Sembra che il codice che ho attualmente disabilita in qualche modo questo ...

Codice corrente pertinente:

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;
}
È stato utile?

Soluzione 2

Quello che ho finalmente finito di fare è stato rimuovere la maggior parte del codice sopra menzionato, in quanto non ha fatto molto. per qualche ragione quando ho impostato le proprietà in Visual Studio non ha funzionato, ma ora funziona. Non so cosa sia successo lì, ma questo è il punto.

Il costruttore ora appare così:

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

Le proprietà sono invece impostate nella GUI di Visual Studio. SelectionMode è impostato su FullRowSelect e MultiSelect è impostato su false.

Non ho ancora ottenuto il focus desiderato, quindi ho impostato il backcolor della riga selezionata su blu e il forecolor su bianco in Visual Studio. Ora funziona come volevo.

Non so ancora perché le proprietà non fossero state impostate correttamente in precedenza, ma almeno ora funziona: P

Altri suggerimenti

Proverei a usare il .OnCellClick e imposta il colore della riga sul blu. Penso che dovresti essere in grado di aggiungere anche un bordo tratteggiato.

Credo che tu possa chiamarlo così:

optionsBannersDataGridView.OnCellClick += new DataGridViewCellEventArgs(optionsBannersDataGridView_OnCellClick);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top