0

我正在循环浏览一个二维数组的内容,该数组包含基因交叉的 Punnett Square 计算结果。我需要总结结果,以便用户可以轻松查看唯一实例。我可以通过将结果放入文本框中来完成此操作,但是当我尝试使用 ListBox 显示数据时,部分信息会丢失,即将 AaBBCc 类型数据转换为与特征直接相关的内容用户最初选择的。

这是该操作的主要代码块:

    foreach (string strCombination in arrUniqueCombinations)
    {
        int intUniqueCount = 0;
        decimal decPercentage;
        foreach (string strCrossResult in arrPunnettSQ)
        {
            if (strCrossResult == strCombination)
            {
                intUniqueCount++;
            }
        }
        decPercentage = Convert.ToDecimal((intUniqueCount*100)) / Convert.ToDecimal(intPossibleCombinations);
        txtReport.AppendText(strCombination + " appears " + intUniqueCount.ToString() + " times or " + decPercentage.ToString() + "%."+ Environment.NewLine);

        lstCrossResult.Items.Add(DecodeGenome(strCombination) + " appears " + intUniqueCount.ToString() + " times or " + decPercentage.ToString() + "%.");
    }

为了将数据附加到文本框,我使用了这段代码,它工作得很好:

txtReport.AppendText(DecodeGenome(strCombination) + " appears " + intUniqueCount.ToString() + " times or " + decPercentage.ToString() + "%."+ Environment.NewLine);

给出结果: Trait 1 Het.,Trait 3 出现 16 次或 25%。

要将结果添加到列表框中,可以使用:

lstCrossResult.Items.Add(strCombination + " appears " + intUniqueCount.ToString() + " times or " + decPercentage.ToString() + "%.");

给出结果: AaBBCc 出现 16 次或 25%。

但是 strCombination 的内容是 AaBBCc,我需要将它翻译成“Trait 1 Het.,Trait 3”,我用这段代码完成了:

private string DecodeGenome(string strGenome)
{
    string strTranslation = "";
    int intLength = strGenome.Length;
    int intCounter = intLength / 2;
    string[] arrPairs = new string[intLength / 2];


    //Break out trait pairs and load into array

    for (int i = 1; i <= intLength; i++)
    {
        arrPairs[i / 2] = strGenome.Substring((i-1),2);
        i++;
    }

    foreach (string strPair in arrPairs)
    {
        char chFirstLetter = strPair[0];
        char chSecondLetter = strPair[1];
        intCounter = intCounter - 1;

        if (Char.IsUpper(chFirstLetter))
        {
            if (!Char.IsUpper(chSecondLetter))
            {
                if (intCounter > 0)
                {
                    txtReport.AppendText(GetDescription(strPair.Substring(0, 1)) + " Het.,");
                }
                else
                {
                    txtReport.AppendText(GetDescription(strPair.Substring(0, 1)));
                }
            }
        }
        else
        {
            if (!Char.IsUpper(chSecondLetter))
            {
                if (intCounter > 0)
                {
                    txtReport.AppendText(GetDescription(strPair.Substring(0, 1)) + ",");
                }
                else
                {
                    txtReport.AppendText(GetDescription(strPair.Substring(0, 1)));
                }
            }

        }

    }

    return strTranslation;
}

这在文本框中显示没有问题,但是当我尝试将其作为项目放入列表框中时,它会将其变为空。而不是: “Trait 1 Het.,Trait 3 出现 16 次或 25%。” 我得到: “出现 16 次或 25%。”

我尝试将结果添加到 ArrayList,然后在处理完所有内容后填充列表框,但结果是相同的。

任何关于为什么列表框不接受翻译的 AaBBCc 信息的线索将不胜感激。

4

1 回答 1

2

strTranslation 从未设置。一切都推送到 txtReport.AppendText

于 2012-10-30T16:55:00.897 回答