C#の新機能
私はwinformのすべてのテキストボックスをクリアしようとしています。このコードスニペットは次のとおりです。
フォーム内のすべてのtextBoxのテキストをクリアするにはどうすればよいですか?
仕事はしますが、誰かが私にそれが何をしているのか説明できますか?
private void ClearTextBoxes()
{
Action<Control.ControlCollection> func = null;
func = (controls) =>
{
foreach (Control control in controls)
if (control is TextBox)
(control as TextBox).Clear();
else
func(control.Controls);
};
func(Controls);
}
Action<Control.ControlCollection> func = null;
を引数として取るデリゲートを宣言していますControl.ControlCollection
。
func = (controls) => {... }
{...}
実行時に内部でアクションを実行する匿名メソッド本体をデリゲートに割り当てます。
func(Controls);
デリゲートを実行し、フォームのControls
すべての最上位コントロールを含むフォームのコレクションを渡します。
匿名メソッドのメソッド本体は、渡されたControlCollection内のコントロールを列挙し、すべてのテキストボックスをクリアします。コントロールではないTextBox
コントロールの場合、それ自体に再帰し、コントロールに含まれているコントロールをチェックします。このように、GroupBox
または他のコントロールコンテナがある場合、それらのコントロールの子はTextBoxを検索します。
これは、次のようにすることで、より簡単に書き直すことができます(デリゲートと匿名メソッドを回避します)。
private void ClearTextBoxes()
{
ClearTextBoxes(Controls);
}
private void ClearTextBoxes(Control.ControlCollection controls) {
foreach (Control control in controls)
if (control is TextBox)
(control as TextBox).Clear();
else
ClearTextBoxes(control.Controls);
};
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加