Member 10410972 Ответов: 3

Копирование элементов в listbox1...? C#


Это код ниже, используемый для копирования элементов в listBox1, и он работает.
Если возможно, я хотел бы отредактировать этот код, чтобы скопировать только часть элемента, а не весь элемент.

пример:
если элемент содержимого:

1. Имя Фамилия
копируются только: имя фамилия
но не для копирования: 1. Имя Фамилия (1. - не копируется)

Примечание: 1. всегда находится в ряду, и 1. не меняется.

private void Copy()
{
    StringBuilder sb = new StringBuilder();

    foreach (string sLine in listBox1.SelectedItems)
    {
        sb.Append(sLine + Environment.NewLine);
    }

    if (!string.IsNullOrEmpty(sb.ToString()))
    {
        Clipboard.SetText(sb.ToString(), TextDataFormat.Text);
    }
}


Что я уже пробовал:

Clipboard.SetText( string.Concat( listBox1.SelectedItems.Cast<string>().Select( item =>
 Regex.Match( item, @"^\d+\.\s+(.+)" ).Groups[1].Value + Environment.NewLine ) ) );


Но это не решение ...

Ralf Meier

Каждый ли элемент вашего списка начинается с "1"?
Или каждый элемент начинается с (увеличивающегося) числа, за которым следует точка ?

Bilgehan Berberoğlu

Какую платформу вы используете при реализации своего приложения? (Winform, wpf и т. д...)

3 Ответов

Рейтинг:
15

Leo Chapiro

Может быть, я ошибаюсь, но это очень общий вопрос: как я могу отрезать часть струны?

В вашем случае вы получаете строку "1. Имя фамилия" и нужно отрезать ведущую "1". как например это:

foreach (string sLine in listBox1.SelectedItems)
{
   //sb.Append(sLine + Environment.NewLine);
   sb.Append(sLine.Replace("1.", "") + Environment.NewLine);
}


Лучше использовать регулярное выражение - это тоже очень хорошо документировано, например Регулярное выражение.Заменить Методом (Строка, Строка)[^]


Member 10410972

Спасибо за ваше решение, я принял его.
А возможно ли и что-то подобное:

по каждому элементу (строка слайн в listbox1.Свойство selecteditems)
{
//СБ.Добавить(слайн + окружающая среда.Строки);
СБ.Добавить(слайн.Заменить("1.", "" || "2.", "") + Среды.Строки);
}

Рейтинг:
0

OriginalGriff

Самый простой способ-проверить, существует ли он, и если да, то отбросить его:

string addme = sLine;
Match match = Regex.Match(sLine, @"(?<=1\.\s+).*");
if (match.Success)
    {
    addme = match.Value;
    }
sb.AppendLine(addme);


Member 10410972

Спасибо вам.

OriginalGriff

Пожалуйста!

Рейтинг:
0

Midi_Mick

Clipboard.SetText(string.Join(Environment.NewLine,
    listBox1.SelectedItems.Cast<string>()
        .Select(item=>Regex.Match(item, @"^\d+\.\s+(.+)"))
        .Where(match=>match.Success)
        .Select(match=>match.Groups[1].Value)
    ));


Karthik_Mahalingam

:-) лол

Member 10410972

Спасибо вам.