Как скопировать текст из разных ярлыков, используя только одно контекстное меню - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть программа Windows Form для списка контактов.У меня уже есть контекстное меню, используемое для копирования и вставки из DataGridView.
Однако я хочу иметь возможность щелкнуть правой кнопкой мыши по метке и выбрать копию в контекстном меню, чтобы скопировать данные из этой ОДНОЙ метки.
Iу меня есть 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 щелкнули правой кнопкой мыши, поэтому берет текст из метки.Clipboard.SetText(labelChosen)
  4. , тогда, если пользователь хочет нажать labelC, он будет выбран.

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

1 Ответ

0 голосов
/ 11 февраля 2019

EDITED - Спасибо @ Jimi за это предложение, через комментарии

Самое простое решение - добавить элемент управления ContextMenuStrip всвою форму из панели инструментов и настройте пункт - «Копировать»;дважды щелкните элемент и используйте следующий код в обработчике событий (при условии, что полоса контекстного меню называется labelContextMenuStrip):

Clipboard.SetText(labelContextMenuStrip.SourceControl.Text);

Затем можно назначить ContextMenuStrip для свойства ContextMenuStrip каждой требуемой метки вконструктор или программно в событии Load или 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);
}
...