1

3 つのタブを含むダイアログを作成しました。タブ 1 と 2 のコントロールには、Validating()イベントを使用した検証があります。ユーザーは主にタブ 1 と 3 で作業し、必要がない限りタブ 2 を表示しません。タブ 1 と 2 のすべてのコントロールは、BindingSource オブジェクトにバインドされています。

私の観察では、タブが表示されるまで、バインドされたコントロールはタブ 2 で初期化されないようです。その結果、これらのコントロールには値がないため、フォーム全体の検証は失敗します。TextBox.Text の値は、初めて呼び出された""ときと、タブを表示した後です。Validating()somevalue

イベントからタブ 2 のコントロールを「事前初期化」しようとしましたLoad(たとえばTextBox.Value = 'test';、Validating() が呼び出される前に値がクリアされていることがわかりました。

BindingSource.Current の値を確認することを考えていましたが、この特定のソリューションには複数の落とし穴があり、特に BindingSource に未検証の値が含まれています。

次のいずれかを行うには、どのような手順を実行する必要がありますか?

  • コントロールを表示する前に初期化する
  • の適切な値 (コントロールまたは BindingSource) を取得するValidation()
4

2 に答える 2

0

プログラムでTab2に変更してから、Tab1に戻すことで、これを解決しました。

        foreach (TabPage tab in tabControl.TabPages)
        {
            tab.Visible = true;
        }
        tabControl.SelectedIndex = 0;
于 2009-04-27T02:39:18.237 に答える
0

確認できる信頼できるソースは見つかりませんでしたが、バインドされたコントロールは、表示されるまで初期化されていないようです。テキストボックスを非表示にすることで、デフォルトで表示されるタブで同様の動作を確認できました。コントロールの.Text値は""、コントロールが表示されるまででした。その時点で、値に期待値が入力されました。

Microsoftフォーラムでの質問により、私が経験していることがさらに確認されました。

これは、.NETデータバインディングが機能する方法です。コントロールが最初に表示されるまで、バインディングは機能しません。...コントロールを一時的に表示する以外の回避策はありません。

于 2009-04-30T02:31:19.290 に答える