Копировать метки в буфер обмена

Мне нужна помощь, я весь день искал в Google и пока не нашел статьи о том, что я пытаюсь сделать. Я работаю над небольшим проектом на С#, используя SharpDevelop в качестве своей IDE, в пользовательском интерфейсе для моего проекта у меня есть несколько меток, 11 из которых указывают, о чем поле (например, «Имя:», «Электронная почта:») и другие 11, которые будут автоматически заполняться информацией из БД после нажатия кнопки «Поиск» и ввода ключевого слова.

Что мне нужно сделать, так это скопировать все ярлыки в буфер обмена, чтобы скопированную информацию можно было использовать в другой программе - у меня есть то же самое приложение в Excel, и оно делает то, что я хочу, но мне нужно немного больше универсальности, поэтому я решил чтобы попробовать C#.

Есть ли способ сделать это на С#? Я столкнулся с ListView и DataGrids и подумал о том, чтобы скопировать метки в ListView (в качестве альтернативы и, если это возможно), чтобы я мог скопировать информацию из ListView, но с форматом, например: Имя: Тим Тернер


person hectormtnezg    schedule 29.01.2013    source источник
comment
Вы смотрели на Clipboard.SetText()?   -  person itsme86    schedule 30.01.2013
comment
Что вы пробовали?!   -  person Federico Berasategui    schedule 30.01.2013


Ответы (2)


Поместите все элементы управления выводом на панель (или укажите их, как вам удобнее), а затем вы можете использовать следующий код:

StringBuilder clipboard = new StringBuilder();
foreach (Label label in outputPanel.Controls.OfType<Label>())
    clipboard.Append(label.Text + "\n");

Clipboard.SetText(clipboard.ToString());

Обновлять

Насколько я понял, вы хотели скопировать только значения ряда флажков, и этого было бы достаточно. Все, что вам нужно сделать, если вы предпочитаете не перебирать набор элементов управления, а добавлять значения в буфер обмена вручную, все, что вам нужно сделать, это именно это.

private void SetClipboard()
{
    StringBuilder clipboard = new StringBuilder();
    clipboard.Append(label1.Text + "\n");
    clipboard.Append(label2.Text + "\n");
    clipboard.Append(textBox1.Text);
    Clipboard.SetText(clipboard.ToString());
}
person User 12345678    schedule 29.01.2013
comment
Спасибо ByteBlast, я изучил этот фрагмент кода и думаю, что могу заставить объект читать каждую метку по отдельности, зачем это делать? Поскольку у меня также есть пара текстовых полей, поле со списком и 2 богатых текстовых поля, которые нужно прочитать, - person hectormtnezg; 30.01.2013

ЕСЛИ вы используете Windows Forms, вы можете использовать ContextMenuStrip , назвав параметр «копировать», а затем применив имя ContextMenuStrip к каждому параметру метки, который говорит ContextMenuStrip

    private void copyUserInfoToolStripMenuItem_Click(object sender, EventArgs e)
    {
        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);
    }

ЕСЛИ вы хотите выбрать ДЛЯ одной метки, используйте второй вариант в ContextMenuStrip и используйте следующее:

Clipboard.SetText(labelContextMenuStrip.SourceControl.Text);

См. следующее: https://stackoverflow.com/a/53263702/7444103 C# Как скопировать текст с разных меток, используя только одну контекстное меню при щелчке правой кнопкой мыши

Это было сделано с помощью @CoolBots и @Jimi.

person John B    schedule 11.02.2019