3

データベースの列を表すテキスト ボックスのリストがフォームにいくつかあります。ユーザーが価格のボックスの 1 つを終了するたびに、フォームを更新したいと考えています。このリストの名前は priceBox[] です。私は lostFocus イベントを認識していますが、それをコレクションで機能させる方法を理解できないようです。このリストは大きくなる可能性があるため、固定数を持つことはできません。私はまだこれのためのコードを持っていません。それが役立つ場合は、テキスト ボックス コントロールが panel1 という名前のパネルに含まれています。

検索してみましたが、これについては何も見つかりません。1 つのテキスト ボックスの更新など、単一のインスタンスのみ。

これが重複していたら申し訳ありませんが、検索しようとしました。また、私はC#が初めてです。

ありがとう。

4

1 に答える 1

4

1 つの方法は、ControlAdded ハンドラーをパネルに追加することです。これにより、新しいテキスト ボックスが追加されるたびに、LostFocus ハンドラーが自動的に追加されます。以下のステップバイステップ:

パネルの場合、ハンドラー ControlAdded イベントをバインドします。これは次のようになります。

private void Panel1_ControlAdded(object sender, ControlEventArgs e)
{
    var tb = e.Control as TextBox;
    if (tb != null)
    {
        tb.LostFocus += new EventHandler(TextBox_LostFocus);
    }
}

次に、 TextBox_LostFocus で、必要なロジックを追加できます

void TextBox_LostFocus(object sender, EventArgs e)
{
    var tb = sender as TextBox;
    if (tb != null)
    {
        // modify tb.Text here, possibly like this...
        tb.Text = String.Format("{0:C}", Decimal.Parse(tb.Text));
    }
}

すべての既存のコントロールを更新するには (未テスト)

foreach (TextBox in panel1.Controls)
{
    tb.LostFocus += new EventHandler(TextBox_LostFocus);
}
于 2012-11-05T04:07:01.597 に答える