簡體   English   中英

應用程序只有在代碼中有消息框時才能正常工作

[英]Application only works correctly if I have messagebox in the code

我有一個按鈕事件,它根據輸入到文本框中的數字生成一些隨機數(例如,如果我輸入 5,它應該生成 5 個不同的隨機數)。 當我在文本框中輸入一個數字並單擊 btnGenerateScores 按鈕時,它會生成一個數字並將該數字放入列表框中 5 次(或根據文本框中的數字多次)。 這種行為是不正確的,它應該生成 5 個不同的數字並在列表框中列出每個數字。 如果我在代碼塊中的任何位置放置 MessageBox.Show(我使用它進行調試)命令,它就可以正常工作。 注釋掉 MessageBox.show 會破壞代碼。 當我不顯示消息框時,有沒有人看到它無法正常工作的任何原因? 代碼如下:

private void btnGenerateScores_Click(object sender, EventArgs e)
            {
                strInput = txtInputNumber.Text;
                intRandCount = Convert.ToInt16(strInput);
                scoresArray = new int[intRandCount];
                intArrayCount = scoresArray.Length;
            btnGenerateScores.Enabled = false;
            // Loop to generate random number
            for (intRndCount = 0; intRndCount < intRandCount; intRndCount++)
            {
                GetRand(intRandCount);
                scoresArray[intCount] = intRandomNum;
                intGenRandom = intRandomNum;

                intArrScores = scoresArray[intCount];
                lstRdmScores.Items.Add(Convert.ToString(intArrScores));
                insertionSortArray = new int[intArrayCount];
                Array.Copy(scoresArray, insertionSortArray, intArrayCount);

                // Instantiate an instance of the class
                arraySort mySort = new arraySort();

                // Get the number of elements to store in the array                    
                string s = Convert.ToString(intCount);
                mySort.x = Int16.Parse(s);                  

                // Get array elements
                for (int i = 0; i < mySort.x; i++)
                {
                    intInsertionSort = insertionSortArray[intCount];
                    string s1 = Convert.ToString(intInsertionSort);
                    mySort.a[i] = Int16.Parse(s1);

                }

                // Sort the array and display in the second list box
                mySort.sortArray();
                intSortScores = insertionSortArray[intCount];
                lstSortScores.Items.Add(Convert.ToString(intSortScores));

// This is the the MessageBox.Show command in question:

    MessageBox.Show("The random number generated is: "); //+ Convert.ToString(intGenRandom));
            }
        }

忽略數組沒有正確排序的事實,我稍后會談到。 我想一次只做一件事。 我使用的是 VS 2013,代碼最初是在 VS 2005 中創建的。

根據您的要求,並查看源代碼,我簡短地重寫了該應用程序:

    private void btnGenerateScores_Click_1(object sender, EventArgs e)
    {
        int genTimes;
        if (Int32.TryParse(txtInputNumber.Text, out genTimes))
        {
            var ints = new List<int>();
            for (var i = 0; i < genTimes; i++)
            {
                var r = new Random(Guid.NewGuid().GetHashCode());
                var rInt = r.Next(0, int.MaxValue); //for ints
                ints.Add(rInt);
            }

            var copyInts = ints.ToList();
            copyInts.AddRange(this.listBox1.Items.Cast<int>());
            copyInts = copyInts.Distinct().OrderBy(x => x).ToList();
            this.listBox1.Items.Clear();
            this.listBox1.Items.AddRange(copyInts.Cast<object>().ToArray());
            MessageBox.Show("The random number generated is: " + String.Join(",", ints));
        }
    }
}

希望這有幫助。

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM