C#事件单击包含多个方法

时间:2015-05-15 10:24:34

标签: c#

我正在尝试嵌套方法,或将方法放在其他方法中。第一次使用C#和Microsoft Visual Studio,我的困境就是这个。我创建了一个带有事件单击按钮的表单来验证用户输入,这本身很好,但是我需要在单击按钮时验证多个输入。在“计算”按钮的单击事件处理程序中,对三个文本框(用户将用于数据输入的三个文本框)执行输入验证。为了提高代码效率,我想使用单独的方法来实现这一点。我已经尝试直接在事件处理程序中编写更多方法,但无论我如何启动方法public,private,static,void,main等我总是会遇到错误。任何帮助/建议将不胜感激。

private void btnCalculate_Click(object sender, EventArgs e)      
        {                     
            int txtLength = 0;
            if ((txtLength < 5) & (txtLength > 50))
                MessageBox.Show("Length measurement is invalid" + "\r\n" + "Please enter a value between 5 and 50", "Data Invalid"); 


            int txtWidth = 0;         
            if ((txtWidth < 2) & (txtLength > 20))
                MessageBox.Show("Width measurement is invalid" + "\r\n" + "Please enter a value between 2 and 20");


            int txtAvgDepth = 0;
            if ((txtAvgDepth < 2) & (txtAvgDepth > 4))
                MessageBox.Show("Width measurement is invalid" + "\r\n" + "Please enter a value between 2 and 20");*/
        }

更改了方法中的代码及其引发的错误消息。原始代码没有语法错误。

问题解决了。非常感谢你的帮助:))

2 个答案:

答案 0 :(得分:3)

只需将它们添加到课程中:

private void CalculateButton_Click(object sender, EventArgs e)      
{
    ValidateLength();
    ValidateWidth();
    ValidateDepth();
}

private void ValidateLength() 
{
    int txtLength = LengthTextBox.Value;
    if ((txtLength < 5) & (txtLength > 50))
        MessageBox.Show("Length measurement is invalid" + "\r\n" + "Please enter a value between 5 and 50", "Data Invalid"); 
}

private void ValidateWidth()
{
    int txtWidth = WidthTextBox.Value;         
    if ((txtWidth < 2) & (txtLength > 20))
        MessageBox.Show("Width measurement is invalid" + "\r\n" + "Please enter a value between 2 and 20");
}

private void ValidateDepth()
{
   int txtAvgDepth = DepthTextBox.Value;
   if ((txtAvgDepth < 2) & (txtAvgDepth > 4))
            MessageBox.Show("Depth measurement is invalid" + "\r\n" + "Please enter a value between 2 and 4");*/
}

我想你正在尝试整理这个并且只有一个验证程序:

private void CalculateButton_Click(object sender, EventArgs e)      
{
    ValidateRange(LengthTextBox.Value, 5, 50, "Length");
    ValidateRange(WidthTextBox.Value, 2, 20, "Width");
    ValidateRange(DepthTextBox.Value, 2, 4, "Depth");
}

private void ValidateRange(int value, int min, int max, string msg) 
{
    if (value < min || value > max)
        MessageBox.Show(
            string.Format("{0} measurement is invalid\r\nPlease enter a value between {1} and {2}", msg, min, max), 
            "Data Invalid"); 
}

答案 1 :(得分:0)

单击处理程序称为委托,它们以单事件,多订阅者方式订阅事件。您尝试实现的目标是完全可能的,但不是来自IDE GUI,因为它旨在管理单个订阅。您可以从像

这样的代码订阅该事件
btnCalculate.Click += ClickHandler1;
btnCalculate.Click += ClickHandler2;
btnCalculate.Click += ClickHandler3;

尽管有可能,但我强烈建议反对它,因为它似乎过度设计,并不是真正意味着如何使用该平台。它不应该有任何不良副作用,因为.Net事件/委托系统已准备好处理这个用例,但可维护性在此过程中受到影响。

我宁愿选择orchestrator方法。订阅一次并从那里调用每个验证方法。

更多阅读材料: