2016-03-14 37 views
0

你好,請幫我在寫入開關語句否則下面的if語句如何使用switch語句,而不是太多否則如果

if(ClientAddressTextBox.Text == "") 
      { 

       MessageBox.Show("Please Enter Client Address"); 
       this.ActiveControl = ClientAddressTextBox; 
      } 

      else if (InnerpathTextBox.Text == "") 
      { 
       MessageBox.Show("Please Enter Internal Path"); 
       this.ActiveControl = InnerpathTextBox; 
      } 

      else if (InspectorIDTextBox.Text == "") 
      { 
       MessageBox.Show("Please Enter Inspector ID"); 
       this.ActiveControl = InspectorIDTextBox; 
      } 

      else if (SerialNumberTextBox.Text == "") 
      { 

       MessageBox.Show("Please Enter Serial Number"); 
       this.ActiveControl = SerialNumberTextBox; 
      } 
+1

在這種情況下,有什麼不妥使用'else if'。我會創建一個方法,將文本框和消息文本作爲參數,您可以在每個「else if」內調用以減少代碼行。 –

+0

同樣我需要減少elseif爲下面的代碼請幫助 –

+0

如何爲此else else(!compare.Contains(validate)) { MessageBox.Show(「您的型號名稱與OEM名稱不匹配「); this.ActiveControl = ModelTextBox; (「您的主機名稱與模型名稱不匹配」);或者(您的主機名稱與模型名稱不匹配);或者(您的主機名稱與模型名稱不匹配);或者(您的主機名稱與模型名稱不匹配)。 this.ActiveControl = HostNameTextBox; } @mathew –

回答

1

你可以做這樣的事情:

var controls = new [] 
{ 
    new {Ctrl = InnerpathTextBox,  Error = "Please Enter Client Address"}, 
    new {Ctrl = ClientAddressTextBox, Error = "Please Enter Internal Path"}, 
    new {Ctrl = InspectorIDTextBox, Error = "Please Enter Inspector ID"}, 
    new {Ctrl = SerialNumberTextBox, Error = "Please Enter Serial Number"} 
}; 

var firstToFailValidation = controls.FirstOrDefault(item => item.Ctrl.Text == ""); 

if (firstToFailValidation != null) 
{ 
    MessageBox.Show(firstToFailValidation.Error); 
    this.ActiveControl = firstToFailValidation.Ctrl; 
} 

你可能想,雖然檢查空值。此代碼假定沒有任何控件或.Text屬性爲空。

+0

這幾乎就像我們複製了對方...... :) – spender

+1

@spender偉大的思想思想一樣! ;)(等待有人說「但傻瓜很少有不同」:)) –

+0

@Matthew Watson謝謝你 –

0

這是一個switch語句中的僞代碼。

string statement; 
switch(statement) 
{ 
    case (ClientAddressTextBox.Text == ""): 
    MessageBox.Show("Please Enter Client Address"); 
    this.ActiveControl = ClientAddressTextBox; 
    break; 

    case (InnerpathTextBox.Text == ""): 
    ... 
} 

等等。

+0

嗯...你的'switch'正在接受一個'string',但在'case'中測試了'int's。 – spender

1

我會處理這個如下:

var validationMessages = new[]{new{Control = InnerpathTextBox, 
            Message = "Please Enter Internal Path"}, 
           new{Control = InspectorIDTextBox, 
            Message = "Please Enter Inspector Id"}, 
           //etc 
}; 
foreach(var vm in validationMessages) 
{ 
    if(string.IsNullOrWhiteSpace(vm.Control.Text)) 
    { 
     MessageBox.Show(vm.Message); 
     this.ActiveControl = vm.Control; 
     break; 
    } 
} 
0

您可以使用像這樣的東西:

private bool IfTextBoxEmpty(string text, string message, Control control) 
    { 
     if (text == "") 
     { 
      MessageBox.Show(message); 
      this.ActiveControl = control; 
      return true; 
     } 
     return false; 
    } 

和使用:

if (!IfTextBoxEmpty(ClientAddressTextBox.Text, "Please Enter Client Address", ClientAddressTextBox) 
{ 
      //if not - Do Something 
}