我有一个联系人列表中的Windows窗体程序。我已经有用于从DataGridView中复制和粘贴的上下文菜单。 不过,我希望能够右击从上下文菜单标签,然后选择复制,将数据从一个标签复制。 我有10个不同的标签,我不希望所有的人,只是我正确的点击来选择副本之一。
我知道,使用Clipboard.SetText(label1.text)
会让我选择特定的标签,但我并不怎么创建10个方面的标签,我应该能够与人做。
如果我想选择所有的文本框,我可以做到这一点。
string UserInfo = $"{lblFirstName.Text}\n" +
$"{lblLastName.Text}\n" +
$"{lblEmailAddress.Text}\n" +
$"{lblPhysicalAddress.Text}\n" +
$"{lblCountry.Text}\n" +
$"{lblCompany.Text}\n" +
$"{lblStatus.Text}\n" +
$"{lblFirstContact.Text}\n" +
$"{lblLastContact.Text}\n" +
$"{lblNotes.Text}\n ";
Clipboard.SetText(UserInfo);
对于在DataGridView很容易。但是,这是用右键点击一个标签做副本。
我创建了一个第二的ContextMenuStrip和应该发生什么:
labelA
右键点击labelA
是正确的点击因此需要从标签的文本。 Clipboard.SetText(labelChosen)
我只是不希望创建10个上下文菜单做到这一点。
编辑 - 感谢@Jimi这一建议,通过评论
最简单的解决方案是将labelC
控制从工具箱添加到您的表格,并配置一个项目 - “复制”;双击该项目,并在事件处理程序使用下面的代码(假设你的右键菜单条被称为labelContextMenuStrip):
ContextMenuStrip
然后,您可以分配到的ContextMenuStrip每个所需标签的Clipboard.SetText(labelContextMenuStrip.SourceControl.Text);
财产在设计,或以编程方式,在你的窗体的ContextMenuStrip
或Load
事件:
Shown
全码(验证解决方案):
foreach (var label in Controls.OfType<Label>())
{
label.ContextMenuStrip = labelContextMenuStrip;
}