2013-10-21 216 views
1

我在做C#/ .NET應用程序。我想在工具欄上創建一個基本上會調用Ctrl + C(複製到剪貼板)的按鈕。我期待剪貼板類,但問題是,因爲我在窗體上有多個文本框,我需要掃描哪一個有焦點,如果/選擇文本,以便從中選擇文本等,所以我認爲必須有「單線「解決方案。將文本複製到剪貼板

任何想法?

(另外,如何添加所有3:剪切,複製,粘貼到工具欄,在主窗體上相同的條件 - 多tekstboxes ..)

+0

的Windows形式?還是WPF? –

+0

請注意,如果您有按鈕,它將從文本框取消焦點...根據您的需要,可能會更方便用戶將某個/每個文本框與「複製到剪貼板」按鈕相關聯。 –

+0

基本上,他必須保存最後聚焦的'TextBox'並在單擊Button時複製其文本 –

回答

3

編輯:如果的WinForms ..

將此放在您的調用函數:

Clipboard.SetText(ActiveControl.Text); 

正如丹尼爾·安博Chleih提到如下:如果你有一個控制交互調用函數的焦點 將改成可控制。這隻有通過其他方式調用纔有效。

編輯: 不是一個襯墊,但工程上的最後一個活動的文本框:

private Control lastInputControl { get; set; } 
protected override void WndProc(ref Message m) 
{ 
    // WM_SETFOCUS fired. 
    if (m.Msg == 0x0007) 
    { 
     if (ActiveControl is TextBox) 
     { 
      lastInputControl = ActiveControl; 
     } 
    } 

    // Process the message so that ActiveControl might change. 
    base.WndProc(ref m); 

    if (ActiveControl is TextBox && lastInputControl != ActiveControl) 
    { 
     lastInputControl = ActiveControl; 
    } 
} 

public void CopyActiveText() 
{ 
     if (lastInputControl == null) return; 
     Clipboard.SetText(lastInputControl.Text); 
} 

現在你可以調用CopyActiveText()來獲取失去焦點最後最新的文本框或當前具有焦點。

+2

但是,當他點擊按鈕時,文本框失去焦點。或者我錯了? –

+0

你說得對。激活的控件在觸發點擊事件之前發生更改。 – Measuring

1

如果您使用WinForms我可能有一個小問題的解決方案。

創建一個對象通過調用AddGotFocusEventHandler - 方法與參數this.Controls來存儲你最後選定的文本框

TextBox lastSelectedTextBox = null; 

在構造函數中的每個FormTextBoxGotFocus - 活動創建一個事件處理程序。

public void AddGotFocusEventHandler(Control.ControlCollection controls) 
{ 
    foreach (Control ctrl in controls) 
    { 
     if(ctrl is TextBox) 
      ctrl.GotFocus += ctrl_GotFocus; 

     AddGotFocusEventHandler(ctrl.Controls); 
    } 
} 

,並設置lastSelectedTextBox到您當前選擇的文本框

void c_GotFocus(object sender, EventArgs e) 
{ 
    TextBox selectedTextBox = (TextBox)sender; 
    lastSelectedTextBox = selectedTextBox; 
} 

在點擊事件處理程序的按鈕,檢查是否selectedText是零和複製文本到剪貼板:

private void Button_Click(object sender, EventArgs e) 
{ 
    if(String.IsNullOrWhiteSpace(lastSelectedTextBox.SelectedText)) 
     Clipboard.SetText(lastSelectedTextBox.Text); 
    else 
     Clipboard.SetText(lastSelectedTextBox.SelectedText); 
} 
+1

this.Controls將只返回窗體上的控件。不是它的子控制。 – Measuring

+0

現在你找到了我;) –