2013-10-16 75 views
0

我遇到了eventhandler textchanged方法用於處理文本框數組的問題。文本框是通過C#生成的,而不是通過ASP.NET生成的。用C改變了文本框文本的問題#

這裏是在C#中的文本框代碼:

int i = 1; 
foreach(string a in data) 
{ 
    i++; 
    TextBox text = new TextBox(); 
    text.TextChanged += new EventHandler(updateone); 
    text.AutoPostBack = true; 
    text.ID = Convert.ToString(i); 
} 

我嘗試了Text.AutoPostBack虛實和我有同樣的結果。當我更改文本框的文本時,甚至不會觸及updateone方法。當我改變文本框的文本 它不更新網站,但再次更新的方法甚至沒有在代碼中被觸及。這裏是更新一代碼:

protected void updateone(object sender, EventArgs e) 
{ 
    TextBox text = (TextBox)sender; 
} 

我感謝大家的幫助!我只是困惑爲什麼這不起作用......並且我必須使用C#方法而不是ASP.NET方式。

+0

有幾個奇怪的事情要指出這裏。首先,我沒有看到一個'TextBox'對象的數組,只有一個'Textbox'命名的文本。其次,你的'updateone'方法什麼都不做。你創建一個臨時的'TextBox'並將它設置爲'sender',然後返回。嘗試製作一個窗口或其他東西。 –

+0

對不起,我經歷了一個循環,從上面顯示的代碼中創建不同的文本框。此外,我也確實做過斷點檢查,看看updateone代碼是否被觸及,這不是......我確實把東西放進去了,它仍然沒有做任何事情。 –

+0

我用循環更新了問題。 –

回答

1

您是否曾嘗試在實例成員中存儲對文本框的引用,以便它們不會收集垃圾?

類似:

List<TextBox> textBoxes = ... 

//in a loop  
text.ID = Convert.ToString(i); 
textBoxes.Add(text); 

- 編輯 此外,作爲一個經驗法則,把儘可能多的記錄在您的應用程序成爲可能。 無論是NLog,任何其他日誌工具,甚至簡單的Console.WriteLine(),看到你的代碼實際上在做什麼是非常有用的。

+0

這是我還沒有做的事,我會試試看。 –

+0

我確實嘗試過,我確實在列表中設置了文本框,但仍然出現了相同的問題...我將使用該代碼並查看我可以執行的操作。感謝您的幫助:-) –

0

既然您已經確認您正在發佈您的實際代碼,並且似乎沒有得到我想說的內容,請讓我嘗試在答案中進行解釋。

第一個問題:您的數組TextBox es不存在,其他答案已經解決,您已經明顯修復但未更新您的問題中的代碼以顯示您的修復程序。

第二個問題:您創建的TextBox沒有以任何方式添加到您的表單中。我不確定你如何在沒有這樣的情況下測試你的事件處理程序。

第三個問題:您的事件處理程序updateone不會執行任何操作。想象一下,你走進一家雜貨店,拿起一個桔子,把它放下,然後離開。這就是你的事件處理程序正在做的事情。除了實例化一個臨時的TextBox然後不做任何事情之外,請嘗試使消息框彈出,或者更改表單上存在的另一個控件的文本。

也許這樣的事情會工作:

List<TextBox> textboxes = new List<TextBox>(); 
int i=1; 
foreach(string a in data) // I assume data is a list or array of strings 
{ 
    // I'm not sure why you iterate over data if you don't use it at all inside the loop... 
    ++i; 
    TextBox text = new TextBox(); 
    text.TextChanged += new EventHandler(updateone); 
    text.AutoPostBack = true; 
    text.ID = Convert.ToString(i); 
    // Add the TextBox to form here, not sure what the call is 
} 
Label info = new Label; 
Label.Text = "Hello!"; 
// Add Label to form here, again not sure what the call is 

然後你的事件處理程序:

protected void updateone(object sender, EventArgs e) 
{ 
    info.Text = ((TextBox)sender).Text; 
} 
+0

我已經嘗試過您剛剛顯示的內容,甚至沒有進入updateone方法。我正在使用asp.net作爲文本框,並且文本框完美地顯示出來。 –

0

你是動態創建ASP.NET控件。這意味着它們不會在表單的回發中自動重新創建。此外,必須在Page_Init事件中創建控件,而不是Page_Load事件。

所以問題是,你在哪裏和什麼時候創建文本框。確保它們是在Page_Init階段創建的,並且您正在請求和回發中創建它們。

+0

我會試試這個! –