3

我遇到以下问题:

  • 我想获得列集合的第一个可见和冻结列。

我认为这会做到:

DataGridViewColumnCollection dgv = myDataGridView.Columns;
dgv.GetFirstColumn(
     DataGridViewElementStates.Visible | DataGridViewElementStates.Frozen);
  • 是否也可以制作一个位掩码来获得第一个冻结或可见的列?
4

2 回答 2

5

AFAIK 的实现是“所有这些”——它使用:

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

这是“全部”。如果你想写一个“any of”,或许可以添加一个辅助方法:(在前面添加“this”DataGridViewColumnCollection使其成为 C# 3.0 扩展方法)

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

或者使用 LINQ:

        return columns.Cast<DataGridViewColumn>()
            .FirstOrDefault(col => (col.State & states) != 0);
于 2009-03-26T09:05:48.167 回答
1

好吧,位掩码通常是这样工作的:

|正在加入旗帜。&正在从位掩码表示的标志集中过滤标志的子集。^正在通过掩码翻转标志(至少在 C/C++ 中)。

To get the first frozen OR visible column GetFirstColumn must handle bitmasks different way (e.g. GetFirstColumn could get the first column that matches any of the flags set, but this is not the case).

于 2009-03-26T09:05:50.973 回答