2017-01-11 9 views
0

Итак, у меня есть этот список, и я могу добавлять элементы к нему через openfiledialog, а затем я делаю File.ReadLine и просматриваю все строки текстового файла, я просто выбран.Как сделать подсчет ярлыков при повторении через мои элементы listView

Итак, предположим, что я выбрал текстовый файл с тремя строками в нем.

Боб Cat Human

то, что он делает это добавляет элементы в ListView.

Теперь для каждого добавляемого элемента я хочу увеличить метку (добавить от 0> 3).

private void btnAddItems_Click(object sender, EventArgs e) 
     { 
      OpenFileDialog ofd = new OpenFileDialog(); 
      ofd.Filter = "Names|*.txt"; 
      if(ofd.ShowDialog() == DialogResult.OK) 
      { 

       string[] recipients = File.ReadAllLines(ofd.FileName); 

       foreach(string name in recipients) 
       { 

        lvRecipient.Items.Add(name); 
        //increment the number of items in the list 
        foreach(int item in lvRecipient.Items) 
        { 
         int i = 0; 
         i++; 
         lbCount.Text = i.ToString(); 
        } 
       } 
      } 

Я попробовал, но получил сообщение об ошибке, как только я запустил его, я был уверен, что он не работал бы потому, что нет никакой реальной locig позади него, как мне сделать мой инкремент метки от 0> 3 (или как всегда много элементов в текстовом файле)?

+1

Переместите это 'int i = 0;' объявление вне этих циклов. – LarsTech

ответ

1

Чтобы решить вопрос, который вы просили, это можно сделать так:

private void btnAddItems_Click(object sender, EventArgs e) 
{ 
    OpenFileDialog ofd = new OpenFileDialog(); 
    ofd.Filter = "Names|*.txt"; 

    if(ofd.ShowDialog() == DialogResult.OK) 
    { 
     string[] recipients = File.ReadAllLines(ofd.FileName); 

     foreach(var name in recipients) 
     { 
      lvRecipient.Items.Add(name); 

      lbCount.Text = lvRecipient.Items.Count.ToString(); 
     } 
    } 
} 

Было бы лучше просто установить значение счетчика меток после были добавлены все элементы, а затем установить его каждый раз, новый добавлен, потому что операция добавления должна быть очень быстрой, что маловероятно, чтобы человек даже обнаружил изменяющееся число. Это может быть сделано следующим образом:

private void btnAddItems_Click(object sender, EventArgs e) 
{ 
    OpenFileDialog ofd = new OpenFileDialog(); 
    ofd.Filter = "Names|*.txt"; 

    if(ofd.ShowDialog() == DialogResult.OK) 
    { 
     string[] recipients = File.ReadAllLines(ofd.FileName); 

     foreach(var name in recipients) 
     { 
      lvRecipient.Items.Add(name); 
     } 

     lbCount.Text = lvRecipient.Items.Count.ToString(); 
    } 
} 
+0

Это работает! Но это не значит, что это действительно так, оно перескакивает с 0> 1000. – JonnyKhanas

+0

@ JonnyKhanas Я обновил ответ, чтобы решить ваш точный вопрос, а также включил то, что, по моему мнению, может быть лучшим решением. – JacobVoller

+0

Он все еще прыгает, даже если я помещаю его в петлю foreach – JonnyKhanas

0
using System; 
using System.IO; 
using System.Windows.Forms; 

namespace Jonny 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void btnAddItems_Click(object sender, EventArgs e) 
     { 
      { 
       OpenFileDialog ofd = new OpenFileDialog(); 
       ofd.Filter = "Names|*.txt"; 
       if (ofd.ShowDialog() == DialogResult.OK) 
       { 
        string[] recipients = File.ReadAllLines(ofd.FileName); 

        foreach (string name in recipients) 
        { 
         lvRecipient.Items.Add(name); 
         //increment the number of items in the list 
         foreach (var item in lvRecipient.Items) 
         { 
          int i = 0; 
          i++; 
          lbCount.Text = i.ToString(); 
         } 
        } 
       } 
      } 
     } 
    } 
} 

Это делает работу - я попробовал. Если вы просто измените «int» на «var» - потому что «lvRecipient.Items» не может рассматриваться как целое число в цикле foreach.

 Смежные вопросы

  • Нет связанных вопросов^_^