2016-11-11 59 views
-1

我得到這個方法在這裏:沒有給定參數對應到所需的形參「發件人」

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.textB的」所需的正式 參數「發件人」 oxValid(object, CancelEventArg)'

難道你們中的一個人,好人,指出我做錯了什麼? 謝謝。

+4

'textBoxValid();'vs'textBoxValid(object sender,CancelEventArgs e)'?參數不匹配。我的意思是錯誤告訴你所有你需要知道的對嗎? '沒有任何論點對應於所需的形式參數'發件人'。你是否傳遞了參數'sender'?不,不,不。 – Liam

+0

你能開導我嗎?我錯過了什麼,因爲如果我使用textBoxValid(object sender,CancelEventArgs e)來代替。括號內的所有文本都被突出顯示... –

回答

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那樣使用它。

+0

謝謝,我意識到我可能犯了很多錯誤,我只是一個初學者,仍然有負擔學習。謝謝。你知道任何解釋如何正確使用ErrorProvider的好資源嗎? –

+0

只是爲了糾正,這裏有一個錯誤:string pattern = @「\,\」; 它應該是:string pattern = @「\,」; 否則它崩潰。我的錯。 –

+0

我無法很快找到資源,它解釋瞭如何正確實現驗證事件和ErrorProvider,但這是您應該查找的方式。這樣做,您可以驗證用戶類型,而不是僅在單擊Enter後單擊。 – CodeCaster

0

檢查的定義:

public void textBoxValid(object sender, CancelEventArgs e)

基礎花花公子。該方法需要2個參數(發送者和參數)。試試這個:

textBoxValid(this, null)

試圖通過一些邏輯發件人。嘗試將其設置爲您爲此方法調用raising object的東西。對於參數,你需要自己決定是否需要它們。

通常EventArgs正在將附加信息傳遞給事件。通常,這個事件是由控件觸發的,而不是來自代碼。

如果此方法心不是從任何控制觸發,你不需要任何參數,讓他們:

public void textBoxValid() { }

+1

謝謝你的時間。 –