2013-01-16 111 views
1

我只是想清除剪貼板文本,如果我的表格LostFocus。我的意思是,如果用戶使用鍵盤或鼠標複製某些內容,必須在LostFocus事件中清除它,然後如果我的表單再次獲得焦點,則需要返回文本。我怎樣才能做到這一點?GotFocus事件不是在C#中創建LostFocus事件後出現的

string sValue = ""; 
public Form1() 
{ 
    InitializeComponent(); 
    this.LostFocus += new EventHandler(Form1_LostFocus); 
    this.GotFocus += new EventHandler(Form1_GotFocus); 
} 

void Form1_GotFocus(object sender, EventArgs e) 
{ 
    Clipboard.SetText(sValue); 
    textBox1.Text = Clipboard.GetText(); 
} 

void Form1_LostFocus(object sender, EventArgs e) 
{ 
    sValue = textBox1.Text; 
    Clipboard.Clear(); 
} 

這是行不通的; LostFocus事件被調用,但GotFocus沒有被調用。我該如何解決這個問題?

回答

1
string sVal = ""; 
    public Form1() 
    { 
     InitializeComponent(); 
     this.Activated += new EventHandler(Form1_GotFocus); 
     this.Deactivate += new EventHandler(Form1_LostFocus); 

    } 

    void Form1_LostFocus(object sender, EventArgs e) 
    { 
     sVal = Clipboard.GetText(); 
     Clipboard.Clear(); 
    } 

    void Form1_GotFocus(object sender, EventArgs e) 
    { 
     Clipboard.SetText(sVal); 
    } 
4

爲了給你一個快速的答案,工作中,而不是添加事件處理程序的形式本身,將它們添加到TextBox控制:

textBox1.LostFocus += new EventHandler(Form1_LostFocus); 
textBox1.GotFocus += new EventHandler(Form1_GotFocus); 

如果表單包含任何可見的控件,它永遠不會觸發GotFocusLostFocus事件。

建議的方式來處理在表單級別此行爲是使用:

this.Deactivate += new EventHandler(Form1_LostFocus); 
this.Activated += new EventHandler(Form1_GotFocus); 

textBox1.Leave += new EventHandler(Form1_LostFocus); 
textBox1.Enter += new EventHandler(Form1_GotFocus); 

微軟稱:

  1. 對於Control.GotFocus Event

    GotFocus和LostFocus事件是與WM_KILLFOCUS和WM_SETFOCUS Windows消息綁定的 的低級別焦點事件。通常, GotFocus和LostFocus事件僅用於更新UICues 或編寫自定義控件時。相反,輸入和離開事件 應該用於除了使用 激活事件和停用事件的表格類以外的所有控件。

  2. 對於Form.Activated Event

    當應用程序是活動的,並具有多種形式,活性形式 是與輸入焦點的形式。不可見的表單不能爲 活動表單。激活可見表單的最簡單方法是 單擊它或使用適當的鍵盤組合。

  3. 對於Control.Enter Event

    Enter和Leave事件被Form類抑制。 Form類中的 等效事件是激活和停用 事件。

+0

感謝做到了.... – Aravind