我的GetField或GetProprety函数返回null,我不明白为什么 所以这是一个返回此问题的小代码
private void Application_WindowSelectionChange(MSProject.Window Window, MSProject.Selection sel, object selType)
{
MSProject.Task task;
string FieldName = Application.ActiveSelection.FieldNameList[1];
if (sel.Tasks != null)
{
task = sel.Tasks[1];
var typeValue = task.GetType();
var typeProp = typeValue.GetField(FieldName);
var typeGetValue = typeProp.GetValue(task);
}
}
所以task
永远不会为空,因为它是if
的条件。
typeValue
获得值{Name = "__ComObject" FullName = "System.__ComObject"}
,
但我的typeProp
和TypeGetvalue
是null
。
答案 0 :(得分:0)
对COM对象的反射与.NET类不同。 由于我没有安装MS Access,因此无法证明以下代码。
string FieldName = Application.ActiveSelection.FieldNameList[1];
if (sel.Tasks != null)
{
task = sel.Tasks[1];
long projectField = FieldNameToFieldConstant(FieldName, pjProject);
string value = task.GetField(projectField);
}
来源: https://msdn.microsoft.com/en-Us/VBA/Project-VBA/articles/task-getfield-method-project https://msdn.microsoft.com/en-Us/VBA/Project-VBA/articles/pjfield-enumeration-project https://msdn.microsoft.com/en-Us/VBA/Project-VBA/articles/application-fieldnametofieldconstant-method-project
答案 1 :(得分:0)
我的GetField或GetProprety函数返回null
这是因为GetField
方法需要很长时间(msdn reference),但是你正在为它提供一个字符串。不使用返回字段的 名称 的FieldNameList
属性,而是使用返回 字段ID的FieldIDList 强>
注意:使用ActiveCell。Text属性获取选择中第一个任务的第一个字段的值。