我的 WindowsForm 只是忽略了一些代码行,我不知道为啥?

Posted

技术标签:

【中文标题】我的 WindowsForm 只是忽略了一些代码行,我不知道为啥?【英文标题】:My WindowsForm just ignore some code lines and I don't know why?我的 WindowsForm 只是忽略了一些代码行,我不知道为什么? 【发布时间】:2021-01-21 13:21:54 【问题描述】:

我一直在用 C# 编写一个关于 VS 的软件。这是我其他人制作的旧程序,但我认为我的问题出在我的代码中。在这个软件中,有两个Form,第一个获取一些数据,第二个进行操作并提供我使用的数据的报告。

double sum = 0;

for (int k = 0; k <= length - 1; )

    sum += Convert.ToDouble(pisteA[k]);
                       
    k += 1;


double average = sum / 3;

我有一个包含第二种形式的文本和空值的数组。我只想对这个数组进行平均,所以使用 for 循环,我做了我必须做的事情。但是,当我启动我的软件时,它不会通过行代码并停在这一行。

sum += Convert.ToDouble(pisteA[k]);

当我使用断点查看发生了什么时,代码会经过这一行,然后转到我的其他表单执行:

formImpression.Show();

为了测试一些东西,我在 sum 行之后和之前添加了一个 MessageBox.Show,似乎软执行了问题行上方的代码,但不是在这之后的代码。

我真的不知道发生了什么。

编辑:为了对我使用的代码有更多的理解,我把它留在这里。

String[] varGen =  formulaire.Form1.varG.piste1, formulaire.Form1.varG.piste2, formulaire.Form1.varG.piste3, formulaire.Form1.varG.piste4, formulaire.Form1.varG.modulesPiste1, formulaire.Form1.varG.modulesPiste2, formulaire.Form1.varG.modulesPiste3, formulaire.Form1.varG.modulesPiste4 ;
        TextBox[] pisteA =  mesure1, mesure2, mesure3, mesure4, mesure5, mesure6, moyenne1 ;
        TextBox[] pisteB =  mesure7, mesure8, mesure9, mesure10, mesure11, mesure12, moyenne2 ;
        TextBox[] pisteC =  mesure13, mesure14, mesure15, mesure16, mesure17, mesure18, moyenne3 ;
        TextBox[] pisteD =  mesure19, mesure20, mesure21, mesure22, mesure23, mesure24, moyenne4 ;
        double moyenne = 0;
        int indexMesures = 0;
        bool presencepn = false;

        for (int n = 0; n < dataGridView1.Rows.Count; n++)
        
            if (formulaire.Form1.varG.pn == dataGridView1.Rows[n].Cells[0].Value.ToString() & formulaire.Form1.varG.pn != null)
            
                presencepn = true;

                //Initialisation
                object module_A1 = dataGridView1.Rows[n].Cells[1].Value;
                object module_A2 = dataGridView1.Rows[n + 1].Cells[1].Value;
                object module_A3 = dataGridView1.Rows[n + 2].Cells[1].Value;
                object module_D1 = dataGridView1.Rows[n].Cells[2].Value;
                object module_D2 = dataGridView1.Rows[n + 1].Cells[2].Value;
                object module_D3 = dataGridView1.Rows[n + 2].Cells[2].Value;

                int moduleA1 = int.Parse(module_A1.ToString())-1;
                int moduleA2 = int.Parse(module_A2.ToString())-1;
                int moduleA3 = int.Parse(module_A3.ToString())-1;
                int moduleD1 = int.Parse(module_D1.ToString())-1;
                int moduleD2 = int.Parse(module_D2.ToString())-1;
                int moduleD3 = int.Parse(module_D3.ToString())-1;

                //Remplissage tableau sans exclusion
                // Piste [1,2,3,4]
                for (int j = 0; j < formulaire.Form1.varG.nbPistes; j++)
                

                    // Initialisation de la moyenne
                    moyenne = 0;


                    // Valeur pour la piste J
                    for (int i = 0; i < Convert.ToInt32(varGen[j + 4]); i++)
                    

                        // Calcul de la moyenne
                        moyenne = moyenne + mesures[indexMesures];


                        // Choix de la piste
                        if (varGen[j] == "A")
                        
                            pisteA[i].Text = Math.Round(mesures[indexMesures], 3).ToString();                       // Remplissage des mesures
                            
                        
                        else if (varGen[j] == "B")
                        
                            pisteB[i].Text = Math.Round(mesures[indexMesures], 3).ToString();                       // Remplissage des mesures
                            pisteB[6].Text = Math.Round((moyenne / Convert.ToDouble(varGen[j + 4])), 3).ToString(); // Remplissage de la case moyenne
                        
                        else if (varGen[j] == "C")
                        
                            pisteC[i].Text = Math.Round(mesures[indexMesures], 3).ToString();                       // Remplissage des mesures
                            pisteC[6].Text = Math.Round((moyenne / Convert.ToDouble(varGen[j + 4])), 3).ToString(); // Remplissage de la case moyenne
                        
                        else if (varGen[j] == "D")
                        
                            pisteD[i].Text = Math.Round(mesures[indexMesures], 3).ToString();                       // Remplissage des mesures
                            pisteD[6].Text = Math.Round(moyenne / Convert.ToDouble(varGen[j + 4]), 3).ToString(); // Remplissage de la case moyenne
                        
                        // Incrémentation de l'index des mesures
                        indexMesures += 1;
                    
                

                int length = pisteA.Length - 1;


                //Suppression des modules exclus
                for (int k = 0; k <= length; k++)
                
                    if (k == (moduleA1) | k == (moduleA2) | k == (moduleA3))
                    
                        pisteA[k].Text = null;
                    
                

                for (int k = 0; k <= length; k++)
                
                    if (k == (moduleD1) | k == (moduleD2) | k == (moduleD3))
                    
                        pisteD[k].Text = null;
                    
                
                double sum = 0;
                for (int k = 0; k <= length - 1; )
                
                    sum += Convert.ToDouble(pisteA[k]);
                    k += 1;
                
                double moyA = sum / 3;
                pisteA[6].Text = Math.Round(moyA).ToString();
            

【问题讨论】:

尝试检查 Windows 偶数日志。 它说我的代码没有任何问题。 也许它抛出了一个异常。是否有 try/catch 块? 不在这部分代码中。你想让我发布我所有的代码吗?也许它会帮助你了解发生了什么。 【参考方案1】:

您是否检查了此设置以查看异常情况?

【讨论】:

我真的不知道如何访问你给我看的窗口,我使用的是 VS 2010,所以它已经很老了.. 尝试菜单Debug -> Windows -> Exception Settings,可能是VS 2010中的相同路径 自从你给我看那个窗口后,我已经搜索过了,但不幸的是,我似乎找不到它。 所以在 VS 2010 中,它有点不同:菜单 Debug + Exceptions 并检查“Common Language Runtime Exceptions”行的“Thrown”和“User-unhandled”。看最后一个答案link 谢谢你,我检查了你所说的,当我运行我的软件时,我在我被阻止了一整天的那一行出现了错误。我会搜索这个问题,看看我能做什么。再次感谢!

以上是关于我的 WindowsForm 只是忽略了一些代码行,我不知道为啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何合并行中重复的单元格值?我的代码忽略了一些重复的值

ssl时如何忽略证书检查

如何告诉 git 忽略个别行,即特定代码行的 gitignore [重复]

为啥这个 CoreGraphics 绘制代码很慢?

WindowsForm给窗口添加一些简单的动画效果

C#在windowsform的datagridview表格里面添加一列删除按钮