[英]Copy text to Clipboard
我在做C#/ .NET應用程序。 我想在工具欄上創建一個按鈕,它基本上會調用Ctrl + C(復制到剪貼板)。 我看了Clipboard類,但問題是因為我在表單上有多個文本框,我需要掃描哪一個有焦點,如果/是選中文本,以便從中選擇文本等,所以我認為必須有我“單線“解決方案。
有任何想法嗎?
(另外,如何在相同的條件下添加所有3:剪切,復制,粘貼到工具欄 - 主窗體上的多個tekstbox ..)
編輯 :如果是Winforms ..
將它放在你的調用函數中:
Clipboard.SetText(ActiveControl.Text);
正如Daniel Abou Chleih所述:如果你必須與控件交互以調用該函數,焦點將被更改為該控件。 這僅在您通過其他方式調用時才有效。
編輯 :不是單行,但適用於最后一個活動的TextBox:
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()來獲取最近失去焦點或當前具有焦點的最新TextBox。
如果你使用WinForms我可能有一個小問題的解決方案。
創建一個Object來存儲上次選擇的TextBox
TextBox lastSelectedTextBox = null;
在構造函數中,通過使用參數this.Controls
調用AddGotFocusEventHandler
-Method,為Form
中的每個TextBox
為GotFocus
-Event創建一個Eventhandler。
public void AddGotFocusEventHandler(Control.ControlCollection controls)
{
foreach (Control ctrl in controls)
{
if(ctrl is TextBox)
ctrl.GotFocus += ctrl_GotFocus;
AddGotFocusEventHandler(ctrl.Controls);
}
}
並將lastSelectedTextBox
設置為當前選定的TextBox
void c_GotFocus(object sender, EventArgs e)
{
TextBox selectedTextBox = (TextBox)sender;
lastSelectedTextBox = selectedTextBox;
}
在Click-EventHandler中,按鈕檢查selectedText是否為null並將文本復制到剪貼板:
private void Button_Click(object sender, EventArgs e)
{
if(String.IsNullOrWhiteSpace(lastSelectedTextBox.SelectedText))
Clipboard.SetText(lastSelectedTextBox.Text);
else
Clipboard.SetText(lastSelectedTextBox.SelectedText);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.