2014-09-12 15 views
5

Mam krótki program Windows, którego używam do szybkiego dodawania informacji. Ale teraz próbuję to ulepszyć. Szukałem bardziej wydajnego, aby sprawdzić puste pola tekstowe, a jeśli pole było puste, aby znaleźć, który to był i ustawić fokus z powrotem tylko do tego pola. Obecnie przechodzę przez wszystkie z nich i sprawdzam, czy jakieś pole było puste, jeśli wyświetla się tylko wiadomość. Ale musisz sprawdzić, w którym polu brakuje tekstu. Herezje kod:Odnajdywanie pola tekstowego jest puste

bool txtCompleted = true; 
string errorMessage = "One or more items were missing from the form"; 
foreach(Control c in Controls) 
{ 
    if (c is TextBox) 
    { 
     if (String.IsNullOrEmpty(c.Text)) 
     { 
      txtCompleted = false;       
     } 
    } 
} 
if (txtCompleted == false) 
{ 
    MessageBox.Show(errorMessage); 
} 
+0

jeśli chcesz sprawdzić jeden TextBox na przykład można również użyć własność 'sender' taka jak ta' ((System.Web.UI.WebControls.TextBox)) .Items.Clear(); ' – MethodMan

Odpowiedz

2

Ustaw fokus na formancie w pętli, a następnie przerwij po zakończeniu.

foreach(Control c in Controls) 
    { 
     if (c is TextBox) 
     { 
      if (String.IsNullOrEmpty(c.Text)) 
      { 
       txtCompleted = false; 
       c.Focus(); 
       MessageBox.Show(errorMessage); 
       break; 
      } 
     } 
    } 
+1

Myślałem, że pytanie dotyczy również 'Focus', ale OP chce ** poprawić ** swój obecny kod. –

+1

Oznacza to, że nie przechwytuje wszystkich kontrolek, chyba że nie ma pustych pól tekstowych. Jak tylko jeden z nich się zatrzyma. W swoim kodzie przewija się przez wszystkie niezależnie. Linq musi przechodzić przez wszystkie kontrolki, aby zwrócić te, które chce, więc jest to bardziej efektywne pod względem przetwarzania. Linq jest bardziej wydajny w liniach kodu. –

+0

@CyberneticTwerkGuruOrc tytuł stwierdza również, że OP chce znaleźć pusty pole tekstowe. W związku z tym nie chodzi tylko o ulepszanie (ponieważ jego obecny kod nie "niczego" odnajduje) – Default

6

Twoje podejście używając foreach wygląda obiecująco do mnie. Howver można użyć LINQ oraz

if(this.Controls.OfType<TextBox>().Any(t => string.IsNullOrEmpty(t.Text)) { 
    ... 
} 

Można użyć metody focus() aby ustawić ostrość na pustym polu tekstowym.

+1

Po opanowaniu LINQ, jesteś właścicielem C#. Ładne rozwiązanie! –

1

Aby uzyskać odwołanie do pustego pola tekstowego używanego niemal takie samo rozwiązanie jak R.T. prezentami, ale używać FirstOrDefault zamiast:

var emptyTextBox = Controls.OfType<TextBox>().FirstOrDefault(t => string.IsNullOrEmpty(t.Text) 
if (emptyTextBox != null) 
{ 
    // there is a textbox that has no Text set 
    // set focus, present error message etc. on emptyTextBox 
} 
Powiązane problemy