Как скопировать текст из разных ярлыков, используя только одно контекстное меню

2

У меня есть программа 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 и то, что ДОЛЖНО произойти:

  1. щелкните правой кнопкой мыши на labelA
  2. Всплывающее контекстное меню с копией и выберите его
  3. Система распознает, что на labelA щелкнули правой labelA мыши, поэтому берет текст из ярлыка. Clipboard.SetText(labelChosen)
  4. тогда, если пользователь хочет нажать на labelC, он будет выбран.

Я просто не хочу создавать 10 контекстных меню для этого.

  • 0
    Можете ли вы поделиться частью кода, который вы пытались?
  • 0
    Получите ContextMenuStrip из ToolBox, поместите его в форму, выберите метку, к которой вы хотите присоединить меню, установите свойство ContextMenuStrip метки для нового меню.
Показать ещё 8 комментариев
Теги:
winforms
label
contextmenu

1 ответ

2
Лучший ответ

ИЗДАНО - Спасибо @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);
}
  • 0
    Как будет использоваться событие Click для щелчка правой кнопкой мыши? это не работает. Я выбрал контекстное меню для метки, поэтому щелчок правой кнопкой мыши вызывает это, и я могу выбрать копию.
  • 0
    Элементы контекстного меню @JohnB, как и многие другие стандартные элементы пользовательского интерфейса .Net, имеют поле Tag которое можно использовать бесплатно. Вы можете вставить его туда, когда создадите контекстное меню в коде, вызываемом правой кнопкой мыши.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню