フォーム(または関連するコンテナ)のコントロールコレクションを照会し、テキストボックスをフィルタリングし、さらに空であるかどうかを調べることができます(実際にはnull値はありません)。例:
var emptyTextboxes = from tb in this.Controls.OfType<TextBox>()
where string.IsNullOrEmpty(tb.Text)
select tb;
if (emptyTextboxes.Any())
{
// one or more textboxes are empty
}
流暢な構文を使用すると効果的に同じことができます。このコードの場合
bool isIncomplete = this.Controls.OfType<TextBox>().Any(tb => string.IsNullOrEmpty(tb.Text));
if (isIncomplete)
{
// do your work
}
は、あなたは、少なくとものVisual Studio 2008/C#3/.NET 3.5で作業する必要があります。プロジェクトにはSystem.Core.dllへの参照が必要です(デフォルトで1つ必要)。クラスファイルに
using System.Linq;
ディレクティブが必要です。
お客様のコメントに基づいて、linqバージョンの理解や作業に問題がある場合は、別の方法を検討してください。あなたは確かに明示的なループでこれを行うことができます(Linqコードは最終的にループになります)。テキストボックスのすべてが単一の容器中にあるかのように
bool isIncomplete = false;
foreach (Control control in this.Controls)
{
if (control is TextBox)
{
TextBox tb = control as TextBox;
if (string.IsNullOrEmpty(tb.Text))
{
isIncomplete = true;
break;
}
}
}
if (isIncomplete)
{
}
最後に、このコードが書かれて考えてみましょう。そのコンテナはフォーム、パネルなどである可能性があります。this
(フォーム)の代わりにthis.SomePanel
のような適切なコンテナを指す必要があります。複数の、おそらく入れ子になっているコンテナで作業している場合は、プログラムで(再帰的な検索、明示的な連結など)見つけるために多くの作業を行うか、配列やその他のコレクションに参照をプリロードするだけです。例
var textboxes = new [] { textbox1, textbox2, textbox3, /* etc */ };
// write query against textboxes instead of this.Controls
のためにあなたが複数のGroupBoxコントロールを持っていると述べました。それぞれのGroupBoxがフォームにロードされ、別のコントロールにネストされていない場合、これが開始される可能性があります。
var emptyTextboxes = from groupBox in this.Controls.OfType<GroupBox>()
from tb in groupBox.Controls.OfType<TextBox>()
where string.IsNullOrEmpty(tb.Text)
select tb;
あなたは、さらにあなたのコードを説明することができますか? – user962206
理解しづらい部分はありますか?これはLinqを使用しています。Linqは、C#とVisual Studio(2008と2010)の最後の2つのリリースの一部です。 –
コンポーネントをクエリできますか?私はそのためのオンライン文書があることを知らなかった?私はかなり興味があります。コンポーネントのクエリに関するドキュメントをもっと見たいと思っています。 – user962206