2015-09-19 64 views
1

首先,我們需要重寫一個自定義控件,使該文本框文本Titlecase離開該CaseingTxtBox,第二次我們在窗體中使用該離開事件來調用某個方法。這可能嗎?第二次可以重寫自定義控件調用的onleave?

我們嘗試下面的代碼,但對於CaseingTxtBoxOnleave事件每一次,但沒有呼籲firstNameTextBox_Leave()

我做了doed適當的情況下,我的文本框自定義控制,我們接到一通電話,並從TextBox繼承我們使用文本框的Leave事件來製作自定義文本框的文本標題大小寫。

public class CaseingTxtBox : TextBox 
{ 
    protected override void OnLeave(EventArgs e) 
    { 
     Text = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(Text.ToLower()); 
     //first call this event for make text titlecase 
    } 
} 

我們使用CaseingTxtBox控制在我的形式,以使文字正確的情況下,並且工作得很好。我們還使用該控件的Leave事件來調用方法,但該方法未被調用。

this.firstNameTextBox.Leave += new System.EventHandl(this.firstNameTextBox_Leave); 

private void firstNameTextBox_Leave(object sender, EventArgs e) 
{ 
    MessageBox.Show("hello"); 
    //second time call this event for call some method or propmt messagebox onleave of CaseingTxtBox . 
} 

回答

2

要覆蓋的方法,但你是不是在你的處理器調用base.OnLeave(e)這樣的事件永遠不會觸發。

documentation是這個相當明確:

給繼承:
在派生類中重寫OnLeave,一定要調用基類的OnLeave方法,以便註冊的委託對事件進行接收。

所以,你需要覆蓋的方法是這樣

protected override void OnLeave(EventArgs e) 
{ 
    base.OnLeave(e); 

    Text = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(Text.ToLower()); 
} 

這將導致兩個你重寫OnLeave方法和連接到Leave任何可能發生的事件被調用。

+0

但這不起作用請簡要解釋我 – ADMIN

+0

@kap添加了確切的代碼來使用。 –

相關問題