简体   繁体   English

在C#中调用DateTimePicker.ValueChanged事件?

[英]Call DateTimePicker.ValueChanged event in C#?

I have created the below code to let my users see how many records have been printed of the total that will be returned when a search is run using current form selections. 我创建了以下代码,以使我的用户可以看到打印出的记录总数(当使用当前表单选择运行搜索时将返回的总数)。

I've got my code functioning for when the value changes for my DateTimePicker control (different conditions, new query, new record count). 当DateTimePicker控件的值更改时(不同条件,新查询,新记录计数),我的代码可以正常运行。 Now I'm trying to call and run this same code event when my combobox control named cmbLetterType has it's selected value changed. 现在,当我名为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();
}

When I type dtpDate.ValueChanged(); 当我输入dtpDate.ValueChanged(); however, I receive: The Event 'System.Windows.Forms.DateTimePicker.ValueChanged' can only appear on the left hand side of += or -= ? 但是,我收到: The Event 'System.Windows.Forms.DateTimePicker.ValueChanged' can only appear on the left hand side of += or -= Can anyone help me with this; 谁能帮我这个; pretty sure I'm overlooking something very basic. 可以肯定,我忽略了一些非常基本的内容。

I suppose absolute worst case I could completely copy the code, but that just seems like a bad idea when it comes to possible future maintenance. 我想绝对可以在最坏的情况下完全复制代码,但是就将来可能的维护而言,这似乎是一个坏主意。

Easy! 简单!

Just take everything inside your event-handler dtpDate_ValueChanged and put it in another function... give it a good, descriptive name. 只需将事件处理程序dtpDate_ValueChanged内的所有内容放入另一个函数中...为其赋予一个好描述性的名称。 Now call it from both places! 现在从两个地方调用它! ;) ;)

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

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

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM