更正 CheckBox 更改事件的已修改集合异常
Correcting Modified Collection Exception for a CheckBox Change Event
我遇到动态创建复选框并且每个都订阅一个事件的问题。选中复选框时,它会选择梁的支撑。取消选中时,不支持的元素将被取消选择。问题是集合 属性 给我一个修改后的集合异常....
List<ElementId> elementIds = new List<ElementId>();
public List<ElementId> ElementIds { get; set; }
private void CheckBox_CheckedChanged(object sender, EventArgs e)
{
UIDocument uidoc = new UIDocument(document);
CheckBox checkBox = (CheckBox)sender;
if (checkBox.Checked)
{
Element element = supportelements.FirstOrDefault(q => q.get_Parameter(BuiltInParameter.ALL_MODEL_MARK).AsString() == GetMark(checkBox));
if (elementIds.Any(q => q.Equals(element.Id)))
return;
else
{
elementIds.Add(element.Id);
ICollection<ElementId> Ids = new List<ElementId>() { element.Id };
uidoc.Selection.SetElementIds(Ids);
uidoc.RefreshActiveView();
}
ElementIds = elementIds;
}
else if (!checkBox.Checked)
{
ElementId invalid = ElementId.InvalidElementId;
List<ElementId> invalidList = new List<ElementId>
{
invalid
};
uidoc.Selection.SetElementIds(invalidList);
uidoc.RefreshActiveView();
if (ElementIds != null)
{
ElementId elementId = supportelements.FirstOrDefault(q => q.get_Parameter(BuiltInParameter.ALL_MODEL_MARK).AsString() == GetMark(checkBox)).Id;
elementIds.Remove(elementId);
}
}
}
您上面的一个陈述是调用 SetElementIds(invalidList)
。
想想这意味着什么。
例如,您告诉 Revit,'Hey, look, here is an invalid element. Please select and highlight it on the screen for me.'
如果我是Revit,我会拒绝
如何简单地提供一个空的元素 ID 列表,然后说 'Here are zero elements. Please select and highlight those.'
我可以想象这可能会更好。
我遇到动态创建复选框并且每个都订阅一个事件的问题。选中复选框时,它会选择梁的支撑。取消选中时,不支持的元素将被取消选择。问题是集合 属性 给我一个修改后的集合异常....
List<ElementId> elementIds = new List<ElementId>();
public List<ElementId> ElementIds { get; set; }
private void CheckBox_CheckedChanged(object sender, EventArgs e)
{
UIDocument uidoc = new UIDocument(document);
CheckBox checkBox = (CheckBox)sender;
if (checkBox.Checked)
{
Element element = supportelements.FirstOrDefault(q => q.get_Parameter(BuiltInParameter.ALL_MODEL_MARK).AsString() == GetMark(checkBox));
if (elementIds.Any(q => q.Equals(element.Id)))
return;
else
{
elementIds.Add(element.Id);
ICollection<ElementId> Ids = new List<ElementId>() { element.Id };
uidoc.Selection.SetElementIds(Ids);
uidoc.RefreshActiveView();
}
ElementIds = elementIds;
}
else if (!checkBox.Checked)
{
ElementId invalid = ElementId.InvalidElementId;
List<ElementId> invalidList = new List<ElementId>
{
invalid
};
uidoc.Selection.SetElementIds(invalidList);
uidoc.RefreshActiveView();
if (ElementIds != null)
{
ElementId elementId = supportelements.FirstOrDefault(q => q.get_Parameter(BuiltInParameter.ALL_MODEL_MARK).AsString() == GetMark(checkBox)).Id;
elementIds.Remove(elementId);
}
}
}
您上面的一个陈述是调用 SetElementIds(invalidList)
。
想想这意味着什么。
例如,您告诉 Revit,'Hey, look, here is an invalid element. Please select and highlight it on the screen for me.'
如果我是Revit,我会拒绝
如何简单地提供一个空的元素 ID 列表,然后说 'Here are zero elements. Please select and highlight those.'
我可以想象这可能会更好。