GetField()无理由地返回null

时间:2018-02-27 14:12:49

标签: c# ms-project

我的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"}, 但我的typePropTypeGetvaluenull

2 个答案:

答案 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

注意:使用ActiveCellText属性获取选择中第一个任务的第一个字段的值。