通常の Windows フォームがいくつかあります。そのうちの 1 つのデータ入力フィールドをクリアするには、次のようなコードを使用します。
ClearInputFields(this);
private void ClearInputFields(Control Page)
{
try
{
foreach (Control ctrl in Page.Controls)
{
if (ctrl is Button)
continue;
if (ctrl is DataGridView)
continue;
if (ctrl is ListBox)
continue;
if (ctrl is TextBox)
{
((TextBox)(ctrl)).Text = string.Empty;
}
else if (ctrl is ComboBox)
{
((ComboBox)(ctrl)).SelectedIndex = 0;
}
else if (ctrl is CheckBox)
{
((CheckBox)(ctrl)).Checked = false;
}
else if (ctrl.Controls.Count > 0)
{
ClearInputFields(ctrl);
}
}
}
catch (Exception ex)
{
TraceFile.Error("ExceptionLog", ex);
}
}
フォームの 1 つで、期待どおりに動作します。もう一方のフォームでは、9 つの ComboBox のうち 2 つがリセットされず、6 つの CheckBox のいずれもクリアされません。
デバッガーでステップスルーすると、フォームに含まれるコントロールのリストに特定のコントロールが含まれていないように見えます.?!
フォームを比較しましたが、これらのコントロールのプロパティに違いはありません。認識されないコンボボックスの 1 つはデータバインドされていますが、1 つはデータバインドされていませんが、これはリセットされたものにも当てはまります。
デザイナーを調べたところ、すべてのコントロールが「this.Controls.Add(this.name_of_control);」として宣言されています。
最後の「else if」を省略してみました (このフォームにはパネル、グループ ボックス、またはその他のコンテナーはありません)。動作に違いはありません。
チェックボックスを明示的に "Checked = false" に設定し、ComboBoxes を "SelectedIndex = 0" に設定すると、フォームのコントロールを反復処理するときに期待どおりに動作しません。
編集 - 補遺: すべてのコントロールは、実行時ではなくデザイナーで作成されます。前述のとおり、フォームにはコンテナがありません。
これは単純で明白な問題の 1 つであると思いますが、これまでのところ、私はそれを見ていません。
任意の洞察をいただければ幸いです。ありがとう!