2014-03-26 53 views
0

我有2個文本框和一個標籤。兩個文本框都具有相同的事件處理程序,這對任何文本框都是通用的。問題是,當我試圖將文本框中的兩個值添加到全局變量時,我只顯示最近修改的文本框的值?2具有相同事件的文本框重置全局變量?

兩個文本框都AutoPostBack="True"

我在做什麼錯在這裏?

public partial class _Default : System.Web.UI.Page 
{ 
    int total; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 

    protected void textbox_TextChanged(object sender, EventArgs e) 
    { 
     TextBox tb = (TextBox)sender; 

     total += int.Parse(tb.Text); 

     Label1.Text = total.ToString(); 
    } 
} 
+0

在你的代碼中,我只看到你訪問一個文本框,另一個是哪裏?你還可以告訴我你的ASPX?你可能更適合使用JQuerey並更新隱藏文本框?我不認爲SENDER可以容納「兩個」對象,它很可能會保存上次更改的對象......如果走這條路線,您可能會使用WebMethods觸發服務器端操作..我可以幫你解決這個問題。 –

+0

這個事件我的意思是通用的任何文本框,我可能會使用...這是我的簡單示例,但我必須有像他們30和所有是不同的類別。所以我這樣做? (TextBox)發件人是一個壞主意? – HelpNeeder

+0

我認爲它是一個壞主意,如果你需要幫助,請和JQuerey和WebMethods一起告訴我 –

回答

0

要麼ViewState或Session,它在每個textbox_TextChanged方法運行時都有0個初始值。你需要明確地從兩個文本框計算這樣的總價值:

protected void textbox_TextChanged(object sender, EventArgs e) 
{ 

    var total = int.Parse(textBox1.Text) + int.Parse(textBox2.Text); 

    Label1.Text = total.ToString(); 
} 

當然,更好的使用的TryParse方法和檢查Text屬性爲空,空字符串值。

+0

對不起,我還不夠清楚。我想將最後一次更改的值添加到總值中。這樣我就不必填寫所有的文本字段。 – HelpNeeder

+0

讓我們假設用戶將第一個文本框的文本更改兩次:第一次打印10和之後20.總計應該是30? –

+0

是的,的確如此。我寧願不用硬編碼任何東西......但我想我只是將字符分開,等等......我認爲這解決了我的問題LOL。 – HelpNeeder

1

變量'total'會爲每個回傳重置。您可以使用事件'TextChanged'添加兩個文本框。所以,試試這個:由於兩個文本框都AutoPostBack="True"textbox_TextChanged處理程序在不同的回發以來總場執行中不堅持

public partial class _Default : System.Web.UI.Page 
{ 

    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 

    protected void textbox_TextChanged(object sender, EventArgs e) 
    { 
     int total;   

     total = int.Parse(this.TextBox1.Text) + int.Parse(this.TextBox2.Text); 

     Label1.Text = total.ToString(); 
    } 
} 

我們還應該放在try/catch塊....

+0

+1用於指出每次使用手柄時,該變量將被重置。 – HelpNeeder

相關問題