2014-07-21 151 views
3

是新來的C#,我需要你的幫助,在此,我想在一個文本框,這一次顯示一個字符是我的代碼C#.NET打印字符串的一個字符時在TextBox

private void timer1_Tick(object sender, EventArgs e) 
{ 
    int i = 0; //why does this don't increment when it ticks again? 
    string str = "Herman Lukindo"; 
    textBox1.Text += str[i]; 
    i++; 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    if(timer1.Enabled == false) 
    { 
     timer1.Enabled = true; 
     button1.Text = "Stop"; 
    } 
    else if(timer1 .Enabled == true) 
    { 
     timer1.Enabled = false; 
     button1.Text = "Start"; 
    } 
} 
+1

你設置我在每次計時器滴答時間爲零。 –

+2

誰降低了這個?這是第一次發佈 – musefan

+1

'if if(timer1.Enabled){} else {}'...好得多(帶有換行符) – musefan

回答

0

與您代碼有關的問題是您每次打勾時都會分配i = 0,因此每次使用時都會使用0。我會建議使用一個類級別的變量。

然而,使用可變類型水平意味着你將需要在某個時候恢復到0,也許你開始計時各一次。

還有一點是,您將要驗證tick事件以確保您不會嘗試訪問不存在的索引(IndexOutOfRangeException)。爲此,我建議一旦最後一個字母被打印,自動停止定時器。

與所有考慮到這一點,這是我的推薦代碼:

int i = 0;// Create i at class level to ensure the value is maintain between tick events. 
private void timer1_Tick(object sender, EventArgs e) 
{ 
    string str = "Herman Lukindo"; 
    // Check to see if we have reached the end of the string. If so, then stop the timer. 
    if(i >= str.Length) 
    { 
     StopTimer(); 
    } 
    else 
    { 
     textBox1.Text += str[i]; 
     i++; 
    } 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    // If timer is running then stop it. 
    if(timer1.Enabled) 
    { 
     StopTimer(); 
    } 
    // Otherwise (timer not running) start it. 
    else 
    { 
     StartTimer(); 
    } 
} 

void StartTimer() 
{ 
    i = 0;// Reset counter to 0 ready for next time. 
    textBox1.Text = "";// Reset the text box ready for next time. 
    timer1.Enabled = true; 
    button1.Text = "Stop"; 
} 

void StopTimer() 
{ 
    timer1.Enabled = false; 
    button1.Text = "Start"; 
} 
4

爲什麼這不,當它再次蜱增加?

因爲您的變量i是您的事件的本地。你需要在課堂上定義它。

int i = 0; //at class level 
private void timer1_Tick(object sender, EventArgs e) 
{ 
    string str = "Herman Lukindo"; 
    textBox1.Text += str[i]; 
    i++; 
} 

在你的事件的出口處,可變i變成超出範圍,並失去其價值。在下一個事件中,它被認爲是一個新的局部變量,初始化值爲0

接下來,您還應該尋找交叉線程異常。由於您的TextBox沒有在UI線程上得到更新。

+0

可能還有一些驗證在那裏發生......保存依賴用戶點擊停止按鈕時,最後一封信 – musefan

+0

非常感謝你的兄弟,並感謝你的每一個機構,我第一次問一個問題,它已被完全回答我很高興它的工作 –

+0

@HermanGideon,歡迎您,歡迎來到堆棧溢出。 – Habib