GetField()无理由地返回null

问题描述 投票:0回答:2

我的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

c# ms-project
2个回答
0
投票

我的GetField或GetProprety函数返回null

这是因为GetField方法需要很长时间(msdn reference),但是你正在给它一个字符串。不使用返回字段名称的FieldNameList属性,而是使用返回字段ID的FieldIDList

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


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

© www.soinside.com 2019 - 2024. All rights reserved.