2013-02-28 3 views
2

У меня проблемы со списками.
Если у меня есть текстовое поле и кнопка добавления, которая помещает данные в список.
Случайно одно и то же имя.
Как предотвратить дубликаты в моем списке?
Я могу ввести код в раздел кнопки или под полем списка?List Box Duplicates

+1

Можете ли вы разместить код? Что вы уже пробовали? –

+0

@MartinMcGirk: Добавлено! –

ответ

2

Вы можете просто проверить, существует ли он до его добавления, например. с Linq:

bool contains = lbName.Items.Cast<ListItem>() 
    .Any(li => li.Text.Equals(txtName.Text, StringComparison.OrdinalIgnoreCase)); 
if(!contains) 
{ 
    lbName.Items.Add(new ListItem(txtName.Text)); 
} 

Предполагая, что вы хотите сравнить регистр без учета регистра.

Редактировать Поскольку вы на самом деле хотите добавить полные файловые пути к ListBox, но вы хотите, чтобы предотвратить, что второй файл с тем же файл-имя добавляется, вы можете использовать Path класс:

string fullFilePath = .... 
string fileName = Path.GetFileName(fullFilePath); 
bool contains = lbName.Items.Cast<ListItem>() 
    .Any(li => Path.GetFileName(li.Text).Equals(fileName, StringComparison.OrdinalIgnoreCase)); 
if (!contains) 
{ 
    lbName.Items.Add(new ListItem(fullFilePath)); 
} 
+0

Что произойдет, если это текстовое поле окажется каталогом для файлового браузера, который добавляет имена файлов в список, но если он снова нажимается, имена файлов снова добавляются ? –

+0

@KevinChun: Боюсь, что я не могу следовать. Код работает с любыми строками, источник не имеет значения. Или вы хотите добавить ** полный путь ** к файлу, но хотите предотвратить добавление второго файла с тем же ** именем файла **? –

+0

: Да, это правильно. –

1

В кнопке мыши вы можете иметь что-то вроде этого:

if (this.listBox.Items.Contains(this.txtCustomerName.Text) == false) 
    { 
    this.listBox.Items.Add(this.txtCustomerName.Text); 
    } 

Или, если вы используете ListItems:

ListItem item = new ListItem(this.txtCustomerName.Text); 

if (listBox.Items.Contains(item) == false) 
{ 
    listBox.Items.Add(item); 
} 
+0

что заменить txtCustomerName ?? –

+0

@KevinЧычет значение, которое вы хотите проверить .. – stuartd

0

Добавьте код в кнопку, можно даже добавить код для проверки вашего события в текстовом поле в реальном времени, что введенный текст верен.