我遇到以下问题:
我认为这样做会:
DataGridViewColumnCollection dgv = myDataGridView.Columns;
dgv.GetFirstColumn(
DataGridViewElementStates.Visible | DataGridViewElementStates.Frozen);
答案 0 :(得分:5)
实施是AFAIK,“所有这些” - 它使用:
((this.State & elementState) == elementState);
哪个是“全部”。如果你想写一个“any of”,也许可以添加一个帮助方法:
(在DataGridViewColumnCollection
之前添加“this”以使其成为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);
答案 1 :(得分:1)
嗯,bitmasks通常这样工作:
|
正在加入旗帜。 &
正在过滤由位掩码表示的标志集中的标志子集。 ^
通过掩码翻转标记(至少在C / C ++中)。
要获得第一个冻结OR可见列GetFirstColumn
必须以不同方式处理位掩码(例如GetFirstColumn
可以获得匹配任何标志集的第一列,但事实并非如此)。< / p>