1

コントロール付きのTabControlを備えたフォームがあります。

フォームのインスタンスを作成した後、関数を呼び出して、値を受け取る準備をします。

この関数は、Textプロパティを「0」からある値に変更します。数行後、フォーム上のすべてのTextBoxを再帰的にリストし、オブジェクトリストに追加する継承された関数を呼び出します

再帰関数が終了すると、リストを確認します。テキストボックスには以前の値があります。


追加情報

 // Textbox.text has "0"

    textBox.Text = "123";

 //Other components change

PrepareForm(); //inherited function that enumerates all TextBoxes (and other components) on that form in a list

PrepareForm()内:

// Value is "123"
List<Control> lstControls = new List<Control>();

foreach (Control c in this.Controls)
{
    ListControls(lstControls, c);
} 

// The textbox on the list has the old value ("0") <- Edited

protected void ListControls(List<Control> Controls, Control control)
    {
        if (control.HasChildren)
        {
            foreach (Control c in control.Controls)
            {
                ListControls(Controls, c);
            }
        }
 }

編集:フォームはInitializeComponent()を呼び出し、テキストボックスに「0」を入力すると、form_loadが返されます。値を「123」に変更し、PrepareForm()を呼び出します。呼び出しの直後に、テキストボックスの値は「123」になります。次に、再帰関数を呼び出します。この再帰関数が戻ると、値は「0」に戻ります。

4

1 に答える 1

2

TabPageまだ表示されていない上に存在するコントロールに値を設定すると、これが発生するのを見てきました。つまり、TabPageはまだ可視化されていないため、線は...

textBox.Text = "123";

...失敗しませんが、何もしません。これを回避できる唯一の方法は、何らかのキャッシュされた変数に値を格納してから、コントロールを消費してOnVisibleChangedそこに値を設定することでした。

これは、 によって行われた残念な最適化TabControlです。

于 2012-12-26T16:08:01.453 に答える