0

eventhandler textchanged メソッドでテキスト ボックスの配列を操作することに問題があります。テキスト ボックスは、ASP.NET ではなく C# で生成されます。

C# の TextBox コードは次のとおりです。

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 false と true を試してみましたが、同じ結果が得られました。テキストボックスのテキストを変更しても、 updateone メソッドは変更されません。テキストボックスのテキストを変更すると、ウェブサイトが更新されますが、 updateone メソッドはコードで触れられていません。updateone コードは次のとおりです。

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

みんなの助けに感謝します!なぜこれが機能しないのか混乱しています...また、ASP.NETの方法ではなくC#の方法を使用する必要があります。

4

3 に答える 3

1

TextBoxes への参照をインスタンス メンバーに格納して、ガベージ コレクションが発生しないようにしてみましたか?

何かのようなもの:

List<TextBox> textBoxes = ...

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

-- また、経験則として、アプリケーションにできるだけ多くのログを記録します。NLog、その他のロギング ツール、または単純な であっても、Console.WriteLine()コードが実際に何を行っているかを確認することは非常に役立ちます。

于 2013-10-16T16:00:49.323 に答える
0

実際のコードを投稿していて、私が言おうとしていることを理解していないようであることを確認したので、回答で説明してみましょう。

最初の問題: es の配列がTextBox存在しません。これは他の回答で既に対処されており、明らかに修正されていますが、修正を示すために質問のコードを更新していません。

2 番目の問題:TextBox作成した es がフォームに追加されません。それを行わずにイベントハンドラーをテストする方法がわかりません。

3 番目の問題: イベント ハンドラー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;
}
于 2013-10-16T17:05:44.233 に答える