2014-01-20 30 views
0

我不斷收到以下錯誤消息在void KeyPress(object sender, KeyPressEventArgs e)使用new關鍵字:按鍵時顯示警告,如果隱藏之意

警告「SpeedyRent.Form2.KeyPress(對象, System.Windows.Forms.KeyPressEventArgs)」隱藏繼承成員 'System.Windows.Forms.Control.KeyPress'。如果想要隱藏 ,請使用新關鍵字。

這是我到目前爲止的代碼:

void KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar)) 
    { 
     e.Handled = true; 
    } 
} 

有以下3個引用:

this.totalTxt.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.KeyPress); 
this.remainTxt.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.KeyPress); 
this.paidTxt.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.KeyPress); 

是什麼原因造成的呢?

回答

4

您的方法被命名爲KeyPress,但是已經有一個事件名爲KeyPress繼承自Control。嘗試使用,不會有任何繼承的成員發生衝突的名稱,如:

private void TextBox_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar)) 
    { 
     e.Handled = true; 
    } 
} 

另外請注意,您可以綁定你的事件是這樣的:

this.totalTxt.KeyPress += this.TextBox_KeyPress; 
this.remainTxt.KeyPress += this.TextBox_KeyPress; 
this.paidTxt.KeyPress += this.TextBox_KeyPress; 
2

是什麼原因造成的呢?

您聲明的方法與在基類中聲明的事件具有相同的名稱。 隱藏派生類中的事件,這不是一般的好主意。

兩個選項:

  • 使用new,因爲編譯器提示
  • 只需重命名

個人而言,我會採取後一種方法的方法,給方法這實際上說什麼名它可以:

private void SuppressNonDigits(object sender, KeyPressEventArgs e) 
{ 
    ... 
} 

您也可以訂閱usin摹寧可少詳細的語法比以前與方法組轉換:

totalTxt.KeyPress += SuppressNonDigits; 
remainTxt.KeyPress += SuppressNonDigits; 
paidTxt.KeyPress += SuppressNonDigits; 
1

不管類,你必須在繼承此方法(KeyPress)從具有非virtualKeyPress方法已經是一個類。

+2

在這種情況下不是一種方法,而是一個事件。 –