2009-03-26 6 views
3

Je vais avoir quelques problèmes avec les éléments suivants:opérations Bit sur Enum

  • Je veux obtenir la première colonne visible et congelée d'une collection de colonnes.

Je pense que cela va le faire:

DataGridViewColumnCollection dgv = myDataGridView.Columns; 
dgv.GetFirstColumn(
    DataGridViewElementStates.Visible | DataGridViewElementStates.Frozen); 
  • Est-il possible de faire un bitmask pour obtenir la première colonne congelée ou visible?

Répondre

5

La mise en œuvre est, autant que je sache, "tous ces" - il utilise:

((this.State & elementState) == elementState); 

Ce qui est "tous". Si vous voulez écrire un « tout de », peut-être ajouter une méthode d'assistance: (ajouter le « ce » avant DataGridViewColumnCollection pour en faire une méthode d'extension C# 3.0 dans)

public static DataGridViewColumn GetFirstColumnWithAny(
     DataGridViewColumnCollection columns, // optional "this" 
     DataGridViewElementStates states) 
    { 
     foreach (DataGridViewColumn column in columns) 
     { 
      if ((column.State & states) != 0) return column; 
     } 
     return null; 
    } 

Ou avec LINQ:

 return columns.Cast<DataGridViewColumn>() 
      .FirstOrDefault(col => (col.State & states) != 0); 
1

Eh bien, bitmasks travaillent généralement comme ceci:

| se joint drapeaux vers le haut. & filtre un sous-ensemble de drapeaux d'un jeu d'indicateurs représenté par un masque de bits. ^ fait basculer les indicateurs par un masque (au moins en C/C++).

Pour obtenir la première colonne visible OU gelée, GetFirstColumn doit gérer les masques de bits de manière différente (par exemple, GetFirstColumn peut obtenir la première colonne qui correspond à l'un des indicateurs définis, mais ce n'est pas le cas).