2014-03-02 273 views
1

我想要製作一個小程序,它將選擇一個隨機線形成一個richtextbox並將其打印在標籤上。隨機分鐘'minValue'不能大於'maxValue'

我也試過製作一個計時器,它會在標籤停止前在標籤上顯示隨機線條。

但是當我運行它,它給了我此錯誤消息:

隨機分「minValue(最小值)」不能大於「包括maxValue」

這是我的代碼:

public partial class Form1 : Form 
{ 

    private int ran; 
    private int ranP; 
    private int max; 
    Random rnd = new Random(); 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click_1(object sender, EventArgs e) 
    { 

     int max = richTextBox1.Lines.Count(); 
     int ranP = rnd.Next(1, max); 
     int ran = 0; 
     timer1.Enabled = true; 
    } 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     label2.Text = "The Winner is: " + richTextBox1.Lines[ranP]; 
     ran = rnd.Next(1, 11); 
     ranP = rnd.Next(1, max); 
     if(ran == 11){ 
      timer1.Enabled = false; 
     } 
    } 
} 

在我的計時器中出現以下錯誤:

ranP = rnd.Next(1,max);

有誰知道爲什麼會發生這種情況?

+3

錯誤信息清楚地解釋了什麼是錯的。 –

+0

如果該框的行數爲0,則表示存在問題。特別是當你使用局部變量max來隱藏域max時,在這種情況下你的行數可以是任何東西,字段仍然是0. – flq

+0

但是它怎麼能在第一次(當我點擊按鈕時)而不是在計時器? 它使用了相同的變量,列表沒有改變? –

回答

2

在您的button1_Click_1中,您聲明瞭一個局部變量max,它將影響您的實例變量this.max。當您在timer1_Tick方法中使用max時,它指的是永遠不會分配給該實例變量。

button1_Click_1分配變更到

max = richTextBox1.Lines.Count(); 

應該有所幫助。

+0

我認爲這不是問題 –

+0

這是問題是的,非常感謝:) –

+1

@ Selman22它是:定時器回調中的'max'指'this.max'。但是他從不分配任何東西給它,所以它仍然是0.計時器是在'button1_Click_1'方法中啓動的,他聲明瞭一個局部變量'max'。 – Dirk

相關問題