2013-12-09 39 views
0

我已經創建了下面的代碼,讓我的用戶可以查看當使用當前表單選擇運行搜索時將返回的總記錄數。在C#中調用DateTimePicker.ValueChanged事件?

我有我的代碼功能,當我的DateTimePicker控制(不同的條件,新的查詢,新的記錄計數)的值發生變化。現在我試圖調用並運行這個相同的代碼事件,當我的名爲cmbLetterType的組合框控件將其選定值更改時。

private void dtpDate_ValueChanged(object sender, EventArgs e) 
{ 
    // If not first run when form loads and sets dtpDate to current value. 
    string qryCmd = ""; 
    OdbcDataReader dr; 

    if (cnt > 1) 
    { 
     switch (cmbLetterType.SelectedIndex) 
     { 
      case 0: 
       docType = "oldAddr"; 
       qryCmd = buildSearchQuery(docType); 
       break; 
      case 1: 
       docType = "newAddr"; 
       qryCmd = buildSearchQuery(docType); 
       break; 
      case 2: 
       docType = "nameChg"; 
       qryCmd = buildSearchQuery(docType); 
       break; 
     } 

     var newQry = qryCmd.Replace(qryCmd.Substring(0, qryCmd.IndexOf("FROM") - 1), "SELECT COUNT(*) AS COUNT"); 
     var orderByIndex = newQry.IndexOf("ORDER BY"); 
     newQry = newQry.Replace(newQry.Substring(orderByIndex, newQry.Length - orderByIndex), ""); 

     dr = mdl.GetData(newQry); 
     while (dr.Read()) 
     { 
      lblNumPrinted.Text = "# out of " + dr["COUNT"].ToString() + " printed"; 
     } 

     // NEED TO PERFORM ANOTHER QUERY COMBINED WITH BAC000PF to see how many records have not been printed. 



     mdl.closeConn(); 
     lblNumPrinted.Visible = true; 
    } 
    cnt++; 
} 

private void cmbLetterType_SelectedValueChanged(object sender, EventArgs e) 
{ 
    // ERROR ~~~~~~~~~ 
    dtpDate.ValueChanged(); 
} 

當我鍵入dtpDate.ValueChanged();不過,我得到:The Event 'System.Windows.Forms.DateTimePicker.ValueChanged' can only appear on the left hand side of += or -=?誰能幫我這個;很確定我忽略了一些非常基本的東西。

我想絕對是最壞的情況,我可以完全複製代碼,但是當涉及到將來可能的維護時,這似乎是個壞主意。

+0

您是否嘗試過將事件連接起來? 'dtpDate.ValueChanged + =新的EventHandler(dtpDate_ValueChanged);' – James

回答

1

簡單!

只要把你的事件處理程序dtpDate_ValueChanged中的所有東西放在另一個函數中......給它一個好的描述性名稱。現在從兩個地方給它打電話! ;)

private void dtpDate_ValueChanged(object sender, EventArgs e) 
{ 
    DoTheStuff(); 
} 

private void cmbLetterType_SelectedValueChanged(object sender, EventArgs e) 
{ 
    DoTheStuff(); 
} 

private void DoTheStuff() 
{ 
    // Code goes here... 
} 
+0

* FACEPALM *〜謝謝傑夫。沒有什麼比總決賽周更能炒作大腦,並讓你問出愚蠢的問題:X –

+0

偶然的時候,任何關於如何捕獲一個組合框內的不同單選按鈕的想法?我有一個名爲「打印選項」的組,其中包含2個單選按鈕,另一組叫做「系統」,帶有3個單選按鈕,當組中的值發生改變時,我想使用相同的代碼。 –

+0

您可以將一個事件處理程序附加到多個對象上的相同事件。我想你可能需要處理每個單選按鈕的RadioButton.CheckedChanged事件。你只需用'+ ='添加處理程序多次。您可以檢查'sender'屬性以查看它來自哪個RadioButton。另外要注意,改變程序中的Checked屬性也會觸發事件。 –