0

動的 MPP ファイルを作成しようとしています。私が抱えている問題は、他のタスク(サブタスク)でタスクを作成することです

最初のタスクを挿入した後、他のすべてのメインタスクはこのタスクの子であり、必要なサブタスクは奇妙な方法で表示されます。

    Task_0
       Task_1
          Task_2
            Task_3
               Task_4
               SubTaskName_4
            SubTaskName_3
          SubTaskName_2
        SubTaskName_1
     SubTaskName_0

私はこのようにしたい

  task 1
   subtask 1

  task 2
    subtask 2

私のコードは次のとおりです

Microsoft.Office.Interop.MSProject.Task task;

string t1, t2;

for (int i = 0; i < 5; i++)
{
    task = project.Tasks.Add(

    "Task_" + i.ToString(), i + 1);
    t1 = "05/12/2012";
    t2 = "12/12/2012";

    /*TimeSpan span = Convert.ToDateTime(t2) - Convert.ToDateTime(t1);
    task.Duration = span.Hours;*/
    task.Start = t1;
    task.Finish = t2;
    task.ResourceNames = "Someone";

    //task.OutlineLevel = 1;

    task.Text1 = "Task_TestTask" + i.ToString();

     //also tried with this one
    /*Microsoft.Office.Interop.MSProject.Task newTask = task.OutlineChildren.Add("otraSubTarea_" + i.ToString(), task.ID + 1);
    newTask.Start = "12/12/2012";
    newTask.Finish = "12/12/2012";
    newTask.OutlineIndent();*/

    Microsoft.Office.Interop.MSProject.Task subTask = project.Tasks.Add("SubTaskName_" + i.ToString(), task.ID+1);
    subTask.Start = "05/12/2012";
    subTask.Finish = "12/12/2012";
    subTask.OutlineIndent();
}

これについてはあまり情報が見つかりません。

4

1 に答える 1

2

これをすでに解決したかどうかはわかりませんが、あなたの投稿は私が持っていたインデントの質問に役立ったので、うまくいけばあなたの問題も解決する答えがあります.

上記で解決できる問題が2つあると思います

  1. 2 つのインデックスが必要です(または最初のインデックスから 2 番目のインデックスを計算するには)。1 つのインデックスが、タスクとその命名、および関連付けられたサブタスクを追跡します。2 番目のインデックスは、実際のタスクの位置を追跡する必要があります。例: Task_1 は位置 1 に挿入され、Task_2 は位置 3 に配列のように挿入されます (タスクのインデックスは 0 ベースではなく 1 ベースです)。
  2. タスクをインデントすると、すべての子タスクもインデントを継承するため、新しい「親」タスクごとに「アウトデント」する必要があります。最初のタスクを期待して、すべての親タスクをアウトデントすると仮定できます

次のコードは私にとってはうまくいきます:

int iTaskIndex = 1;
for (int iTaskNameIndex = 1; iTaskNameIndex <= 5; iTaskNameIndex++)
{
    Task task = project.Tasks.Add("Task_" + iTaskNameIndex.ToString(), iTaskIndex);
    if (iTaskIndex > 1)
        task.OutlineOutdent();
    Task subTask = project.Tasks.Add("SubTaskName_" + iTaskNameIndex.ToString(), iTaskIndex + 1);
    subTask.OutlineIndent();
    iTaskIndex += 2;
}

新しい親タスクと子タスクのペアを挿入した後、次のことを行う必要があります

  1. タスク命名インデックスを 1 増やします
  2. タスクの位置インデックスを 2 増やします
  3. 新しい親タスクを追加する前 (または追加するとき) にインデントをリセットする

これは私に与えます:

Task_1
    SubTaskName_1
Task_2
    SubTaskName_2
Task_3
    SubTaskName_3
Task_4
    SubTaskName_4
Task_5
    SubTaskName_5

これらのインデックスを組み合わせて、名前付けインデックスに基づく計算として位置インデックスを参照することができます (例: iTaskIndex = ((iTaskNameIndex * 2) -1))。

于 2012-10-11T00:42:43.493 に答える