Bit-Operationen auf Enum
-
22-08-2019 - |
Frage
Ich habe einige Probleme mit dem folgenden:
- Ich mag die erste sichtbare und gefrorene Spalte einer Spalte Sammlung erhalten.
Ich denke, das wird es tun:
DataGridViewColumnCollection dgv = myDataGridView.Columns;
dgv.GetFirstColumn(
DataGridViewElementStates.Visible | DataGridViewElementStates.Frozen);
- Ist es auch möglich, eine Bitmaske zu machen, die erste gefrorene oder sichtbare Spalte zu bekommen?
Lösung
Die Implementierung ist, AFAIK, "alle diese" - es verwendet:
((this.State & elementState) == elementState);
Welche „alle“ ist. Wenn Sie ein „irgendetwas von“ schreiben wollte, vielleicht eine Hilfsmethode hinzu:
(Fügen Sie das "this" vor DataGridViewColumnCollection
machen ihm zu einer C # 3.0-Erweiterungsmethode in)
public static DataGridViewColumn GetFirstColumnWithAny(
DataGridViewColumnCollection columns, // optional "this"
DataGridViewElementStates states)
{
foreach (DataGridViewColumn column in columns)
{
if ((column.State & states) != 0) return column;
}
return null;
}
oder mit LINQ:
return columns.Cast<DataGridViewColumn>()
.FirstOrDefault(col => (col.State & states) != 0);
Andere Tipps
Nun, Bitmasken in der Regel wie folgt funktionieren:
|
beitritt Fahnen auf. &
filtert Subset von Flags aus einem Flag gesetzt durch eine Bitmaske dargestellt. ^
wird Fahnen durch eine Maske (zumindest in C / C ++).
Um die erste gefroren oder sichtbare Spalte GetFirstColumn
bekommen müssen Bitmasken andere Art und Weise handhaben (z GetFirstColumn
könnte die erste Spalte erhalten, die eine der Fahnen übereinstimmt gesetzt, aber dies ist nicht der Fall ist).