2016-08-27 76 views
0

我在顯示消息框中的變量時遇到問題。我想要做的是在Combobox未填寫的消息框中顯示,它將顯示在消息框內的列表中,然後停止用戶保存到數據庫。該錯誤指出它是使用未分配的變量,但我已將其分配在'if'語句的頂部。在消息框中顯示if語句變量

private void btnSaveDB_Click(object sender, EventArgs e) 
    { 
     if (cmbPolType.SelectedItem == null || 
      cmbPolNum.SelectedItem == null || 
      cmbTPReg.SelectedItem == null || 
      cmbLossType.SelectedItem == null || 
      cmbLossDesc.SelectedItem == null || 
      cmbInsdFault.SelectedItem == null) 
     { 
      string polType, polNum, lossType, lossDesc, tpReg, insdFault = null; 

      if (cmbPolType.SelectedItem==null) 
      { 
       polType = "Policy Type"; 
      } 

      if (cmbPolNum.SelectedItem==null) 
      { 
       polNum = "Policy Number"; 
      } 
      if (cmbLossType.SelectedItem==null) 
      { 
       lossType = "Loss Type"; 
      } 
      if (cmbLossDesc.SelectedItem ==null) 
      { 
       lossDesc = "Loss Description"; 
      } 
      if (cmbTPReg.SelectedItem==null) 
      { 
       tpReg = "TP Reg"; 
      } 
      if (cmbInsdFault.SelectedItem==null) 
      { 
       insdFault = "Insd at Fault"; 
      } 

      MessageBox.Show("You have not selected options for the following: " + lossDesc); 
     } 
+0

您已將'insdFault'分配給'null',但只聲明'lossDesc'。多變量聲明和定義不能像那樣工作。 –

+0

另一個快速提示,如果你想打印出哪些選項有問題,你可能需要使用一個StringBuilder,然後在每個if語句中附加它。 – Swemoph

回答

3

沒有lossDesc不以這種方式還有其他字符串變量,但insdFault初始化。 (錯誤信息指向lossDesc,因爲是代碼剩餘部分中唯一使用的)。

而是初始化每一個,我建議使用一個簡單的List<string>在其中添加你的錯誤消息,並在測試

List<string> missingData = new List<string>(); 
if (cmbPolType.SelectedItem == null) 
    missingData.Add("Policy Type"); 
if (cmbPolNum.SelectedItem == null) 
    missingData.Add("Policy Number"); 
if (cmbLossType.SelectedItem == null) 
    missingData.Add("Loss Type"); 
if (cmbLossDesc.SelectedItem == null) 
    missingData.Add("Loss Description"); 
if (cmbTPReg.SelectedItem == null) 
    missingData.Add("TP Reg"); 
if (cmbInsdFault.SelectedItem == null) 
    missingData.Add("Insd at Fault"); 

if(missingData.Count > 0) 
{ 
    MessageBox.Show("You have not selected options for the following: " + 
        Environment.NewLine + 
        string.Join(Environment.NewLine, missingData.ToArray())); 
} 
else 
{ 

    ... save to database ? .... 
} 

這樣就省去了使用和初始化後輸入所有的人一堆字符串變量,並使用string.Join方法將單個字符串中的整個錯誤消息與單獨的一行中的每個錯誤進行比較。

+3

這種方法很好。它允許輕鬆添加額外的驗證。 –

+0

是的,@stefchri我也會在開始的時候刪除那個醜陋的if語句,因爲在新的連擊檢查和增益(如果有的話)最小的情況下,只增加另一個可能的錯誤點。 – Steve

+0

非常感謝您的所有答覆。該清單是一個更好的方式繼續..謝謝! – Griff