没有给出与所需的形式参数'sender'相对应的参数

本文关键字:参数 相对 sender | 更新日期: 2023-09-27 18:17:23

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

 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)

你们谁能指出我做错了什么吗?谢谢你。

没有给出与所需的形式参数'sender'相对应的参数

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;
}

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

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

这将暂时解决您的问题。但是你仍然没有使用ErrorProvider

检查定义:

public void textBoxValid(object sender, CancelEventArgs e)

基础的家伙。这个方法需要2个参数(sender和args)。试试这个:

textBoxValid(this, null)

尝试传递一些逻辑作为发送者。尝试将其设置为此方法的raising object。对于参数,您需要自己决定是否需要它们。

通常EventArgs正在传递事件的侧信息。通常,此事件由控件触发,而不是由代码触发。

如果此方法不是由任何控件触发的,并且您不需要任何参数,则保留它们:

public void textBoxValid() { }