我在做C#/ .NET应用程序。我想在工具栏上创建一个基本上会调用Ctrl + C(复制到剪贴板)的按钮。我期待剪贴板类,但问题是,因为我在窗体上有多个文本框,我需要扫描哪一个有焦点,如果/选择文本,以便从中选择文本等,所以我认为必须有“单线“解决方案。将文本复制到剪贴板
任何想法?
(另外,如何添加所有3:剪切,复制,粘贴到工具栏,在主窗体上相同的条件 - 多tekstboxes ..)
我在做C#/ .NET应用程序。我想在工具栏上创建一个基本上会调用Ctrl + C(复制到剪贴板)的按钮。我期待剪贴板类,但问题是,因为我在窗体上有多个文本框,我需要扫描哪一个有焦点,如果/选择文本,以便从中选择文本等,所以我认为必须有“单线“解决方案。将文本复制到剪贴板
任何想法?
(另外,如何添加所有3:剪切,复制,粘贴到工具栏,在主窗体上相同的条件 - 多tekstboxes ..)
编辑:如果的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()来获取失去焦点最后最新的文本框或当前具有焦点。
但是,当他点击按钮时,文本框失去焦点。或者我错了? –
你说得对。激活的控件在触发点击事件之前发生更改。 – Measuring
如果您使用WinForms我可能有一个小问题的解决方案。
创建一个对象通过调用AddGotFocusEventHandler
- 方法与参数this.Controls
来存储你最后选定的文本框
TextBox lastSelectedTextBox = null;
在构造函数中的每个Form
为TextBox
的GotFocus
- 活动创建一个事件处理程序。
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);
}
this.Controls将只返回窗体上的控件。不是它的子控制。 – Measuring
现在你找到了我;) –
的Windows形式?还是WPF? –
请注意,如果您有按钮,它将从文本框取消焦点...根据您的需要,可能会更方便用户将某个/每个文本框与“复制到剪贴板”按钮相关联。 –
基本上,他必须保存最后聚焦的'TextBox'并在单击Button时复制其文本 –