没有任何参数符合所需的形式参数' sender'

时间:2016-11-11 14:10:24

标签: c#

我在这里得到了这个方法:

 public void textBoxValid(object sender, CancelEventArgs e)
{
    string error = null;
    string pattern = @"\,\";
    if(Regex.IsMatch(priceTextBox.Text, pattern))
    {
        error = "Please use [.] instead of [,]";
        e.Cancel = true;
    }
    errorProvider1.SetError((Control) sender, error);
}

当我在这里打电话时:

 private void enterButton_Click(object sender, EventArgs e)
{
    textBoxValid();
    //Write all data to a file.
    using (StreamWriter sw = new StreamWriter(@"c:\event.txt", true))
    {
        sw.WriteLine(priceTextBox.Text + "," + eventTextBox.Text + "," + descriptionTextBox.Text + ","
        + DateTimePicker.Value + "," + DayUpDown.Value);           
    }
    clearTextBoxes();                      
}

我收到错误说:

  

没有任何论据符合所要求的形式   参数'发件人' ' WriteEventForm.textBoxValid(对象,   CancelEventArg)'

你们其中一个人,好人,能指出我做错了什么吗? 谢谢。

2 个答案:

答案 0 :(得分:1)

textBoxValid(),您正在调用一个方法,该方法包含两个带有零参数的非可选参数。你不能在C#中做到这一点。

您似乎想要在单击按钮时验证文本框的输入,并在输入无效时阻止该单击事件继续进行。现在以非惯用的方式修复代码,将完全改变方法:

public bool ValidateTextBox(TextBox textBoxToValidate)
{
    string error = null;
    string pattern = @"\,\";
    if(Regex.IsMatch(textBoxToValidate.Text, pattern))
    {
        error = "Please use [.] instead of [,]";
        errorProvider1.SetError(textBoxToValidate, error);
        return false;
    }

    return true;
}

因为sender中的enterButton_Click()将是按钮,而不是文本框。因此,您需要提供对要验证的文本框的引用,然后检查方法的返回值:

private void enterButton_Click(object sender, EventArgs e)
{
    if (!ValidateTextBox(priceTextBox))
    {       
        return;
    }

这将解决您现在的问题。但是你仍然没有按照它的意图使用ErrorProvider。

答案 1 :(得分:0)

检查定义:

public void textBoxValid(object sender, CancelEventArgs e)

基础知识老兄。此方法需要2个参数(sender和args)。试试这个:

textBoxValid(this, null)

尝试将某些逻辑作为发件人传递。尝试将其设置为您为此方法调用raising object的内容。对于args,你需要自己决定是否需要它们。

通常EventArgs正在向一个事件传递side-informations。通常,此事件由控件触发,而不是从代码触发。

如果没有从任何控件触发此方法,并且您不需要任何参数,请保留它们:

public void textBoxValid() { }