我正在使用vs 2013在winforms c#中创建一个应用程序。
在应用程序中,我有一个文本文件,我正在使用时间选择下拉列表中的自定义格式来说明int格式的时间。
然后,我想在可选列表视图中显示该文本文件中的内容,我可以从文本文件中删除它。我几乎在那里,但是当我尝试将项目添加到列表框中时似乎添加,但他们没有正确显示。
例如,在我的文本文件中说
22102210
19101610
17182218
10272227
那就是它应该如何在listview中显示为可选择的准备删除。
目前它没有正确显示,它显示为1 .. 2 .. 1 ..
有人可以帮助我,并指出我为什么会发生这种情况的正确方向?任何帮助非常感谢。这是我的班级。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Chronos
{
public partial class Interface : Form
{
private string[] getTimes = System.IO.File.ReadAllLines(@"G:\Dropbox\University\Chronos\Application\Chronos\Chronos\AdminAccount\Times.txt");
public Interface()
{
InitializeComponent();
}
private void Interface_Load(object sender, EventArgs e)
{
PopulateList();
}
private void PopulateList()
{
int size = getTimes.Length;
lstTime.Items.Clear();
GetTimes();
for (int i = 0; i < size; i++)
{
lstTime.Items.Add(getTimes[i]);
}
}
private void GetTimes()
{
string[] getTimes = System.IO.File.ReadAllLines(@"G:\Dropbox\University\Chronos\Application\Chronos\Chronos\AdminAccount\Times.txt");
}
private void btnAdd_Click(object sender, EventArgs e)
{
string time = pickerTimeStart.Value.Hour.ToString() + pickerTimeStart.Value.Minute.ToString() + pickerTimeEnd.Value.Hour.ToString() + pickerTimeEnd.Value.Minute.ToString();
System.IO.File.AppendAllText(@"G:\Dropbox\University\Chronos\Application\Chronos\Chronos\AdminAccount\Times.txt", time + Environment.NewLine);
PopulateList();
MessageBox.Show("Time added", "Ok");
//PopulateList();
}
}
}
答案 0 :(得分:2)
按照目前的说法,GetTimes
除了读取文件外什么都不做:
private void GetTimes()
{
// "string[]" here overrides the outer scope
string[] getTimes = System.IO.File.ReadAllLines(@"G:\Dropbox\University\Chronos\Application\Chronos\Chronos\AdminAccount\Times.txt");
}
如果你把它改成这个,它会变得更有用:
private string[] GetTimes()
{
return File.ReadAllLines(@"G:\Dropbox\University\Chronos\Application\Chronos\Chronos\AdminAccount\Times.txt");
}
...然后PopulateList
可以简单地成为:
lstTime.Items.Clear(); //so you aren't getting a bunch of dupes
lstTime.Items.AddRange(GetTimes().Select(t => new ListViewItem(t)).ToArray());
您也可以删除此行,因为您不需要在类中保留数据的副本:
private string[] getTimes = ...
注意:如果您决定将数据源保留在本地而不是仅针对该文件,则大部分内容都会发生变化。