У меня есть программа Windows Form для списка контактов. У меня уже есть контекстное меню, используемое для копирования и вставки из 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 было легко. Но это для использования правой кнопкой мыши на ОДНОЙ метке, чтобы сделать копию.
Я создал 2-й ContextMenuStrip и то, что ДОЛЖНО произойти:
labelA
labelA
щелкнули правой labelA
мыши, поэтому берет текст из ярлыка. Clipboard.SetText(labelChosen)
labelC
, он будет выбран.Я просто не хочу создавать 10 контекстных меню для этого.
ИЗДАНО - Спасибо @Jimi за это предложение, через комментарии
Самое простое решение - добавить элемент управления ContextMenuStrip
в форму из панели инструментов и настроить элемент - "Копировать"; дважды щелкните элемент и используйте следующий код в обработчике событий (при условии, что ваша контекстная строка меню называется labelContextMenuStrip):
Clipboard.SetText(labelContextMenuStrip.SourceControl.Text);
Затем вы можете назначить ContextMenuStrip каждому желаемому свойству метки ContextMenuStrip
в конструкторе или программным Shown
событии Load
Form или Shown
:
foreach (var label in Controls.OfType<Label>())
{
label.ContextMenuStrip = labelContextMenuStrip;
}
Полный код (проверенное решение):
private void Form1_Load(object sender, EventArgs e)
{
// Optional - can be manually set in the Designer
foreach (var label in Controls.OfType<Label>())
{
label.ContextMenuStrip = labelContextMenuStrip;
}
}
private void copyToolStripMenuItem_Click(object sender, EventArgs e)
{
Clipboard.SetText(labelContextMenuStrip.SourceControl.Text);
}
Tag
которое можно использовать бесплатно. Вы можете вставить его туда, когда создадите контекстное меню в коде, вызываемом правой кнопкой мыши.
ContextMenuStrip
из ToolBox, поместите его в форму, выберите метку, к которой вы хотите присоединить меню, установите свойствоContextMenuStrip
метки для нового меню.