Operazione a bit su Enum
-
22-08-2019 - |
Domanda
sto avendo qualche problema con il seguente:
- Voglio ottenere la prima colonna visibile e congelate di una collezione colonna.
Credo che questo lo farà:
DataGridViewColumnCollection dgv = myDataGridView.Columns;
dgv.GetFirstColumn(
DataGridViewElementStates.Visible | DataGridViewElementStates.Frozen);
- E 'anche possibile fare una maschera di bit per ottenere la prima colonna congelati o visibile?
Soluzione
L'implementazione è, per quanto ne so, "tutte queste" - che utilizza:
((this.State & elementState) == elementState);
che è "tutto". Se si voleva scrivere un "qualsiasi", forse aggiungere un metodo di supporto:
(Aggiungere il "questo" prima DataGridViewColumnCollection
per renderlo un metodo di C # 3.0 estensione a)
public static DataGridViewColumn GetFirstColumnWithAny(
DataGridViewColumnCollection columns, // optional "this"
DataGridViewElementStates states)
{
foreach (DataGridViewColumn column in columns)
{
if ((column.State & states) != 0) return column;
}
return null;
}
O con LINQ:
return columns.Cast<DataGridViewColumn>()
.FirstOrDefault(col => (col.State & states) != 0);
Altri suggerimenti
Bene, maschere di bit di solito lavorano in questo modo:
|
sta unendo le bandiere in su. &
sta filtrando sottoinsieme delle bandiere di un insieme bandiera rappresentato da una maschera di bit. ^
sta lanciando bandiere da una maschera (almeno in C / C ++).
Per ottenere il primo GetFirstColumn
congelati o visibile colonna deve gestire bitmasks modo diverso (ad esempio GetFirstColumn
potrebbe ottenere la prima colonna che corrisponde a uno dei flag impostati, ma non è questo il caso).