我遇到以下问题:
- 我想获得列集合的第一个可见和冻结列。
我认为这会做到:
DataGridViewColumnCollection dgv = myDataGridView.Columns;
dgv.GetFirstColumn(
DataGridViewElementStates.Visible | DataGridViewElementStates.Frozen);
- 是否也可以制作一个位掩码来获得第一个冻结或可见的列?
我遇到以下问题:
我认为这会做到:
DataGridViewColumnCollection dgv = myDataGridView.Columns;
dgv.GetFirstColumn(
DataGridViewElementStates.Visible | DataGridViewElementStates.Frozen);
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);
好吧,位掩码通常是这样工作的:
|
正在加入旗帜。&
正在从位掩码表示的标志集中过滤标志的子集。^
正在通过掩码翻转标志(至少在 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).