我之前创建了一个程序,将文本文件中的数据显示到列表视图中,用户可以单击列表视图中的名称,并显示该名称的电话号码。现在我正在尝试向程序添加一个新表单,允许用户从组合框中选择一个名称,然后在文本框中显示该名称,并允许用户更改名称并将其保存在文本文件中。
无论如何,我正在尝试以新的形式访问原始程序中的加载事件,我似乎无法弄清楚如何做到这一点。这是我的代码:
public partial class VendorsDictionary : Form
{
public VendorsDictionary()
{
InitializeComponent();
}
private Dictionary<string,string> vendorPhones = new Dictionary<string,string>();
public void VendorsDictionary_Load(object sender, EventArgs e)
{
string currentLine;
string[] fields = new string[2];
StreamReader vendorReader = new StreamReader("Vendor.txt");
while (vendorReader.EndOfStream == false)
{
currentLine = vendorReader.ReadLine();
fields = currentLine.Split(',');
vendorPhones.Add(fields[1], fields[6]);
string[] name = { fields[1] };
string[] city = { fields[3] };
string[] state = { fields[4] };
string[] zipcode = { fields[5] };
string[] phone = { fields[6] };
for (int i = 0; i < name.Length; i++)
{
lvDisplay.Items.Add(new ListViewItem(new[] { name[i], city[i], state[i], zipcode[i] }));
}
}
vendorReader.Close();
}
private void lvDisplay_SelectedIndexChanged(object sender, EventArgs e)
{
if (lvDisplay.SelectedItems.Count>0)
{
ListViewItem item = lvDisplay.SelectedItems[0];
lblName.Text = item.SubItems[0].Text;
lblPhone.Text = vendorPhones[item.SubItems[0].Text];
}
}
private void btnUpdate_Click(object sender, EventArgs e)
{
UpdateVendor updateVendor = new UpdateVendor();
updateVendor.Show();
}
}
我已经尝试将其更改为静态和我在此处找到的其他一些想法,但似乎无法让它工作。任何帮助将不胜感激!
答案 0 :(得分:1)
您不需要VendorsDictionary_Load
方法中的所有代码。你真的可以清理它。我会告诉你如何。
将此课程添加到您的项目中:
public class Vendor
{
public string City { get; set; }
public string Name { get; set; }
public string Phone { get; set; }
public string State { get; set; }
public string ZipCode { get; set; }
}
将此方法添加到VendorsDictionary
:
public static IEnumerable<Vendor> LoadVendors()
{
var vendors =
File.ReadAllLines("Vendor.txt").Select(x => x.Split(','))
.Select(x =>
new Vendor
{
Name = x[1],
City = x[3],
State = x[4],
ZipCode = x[5],
Phone = x[6]
}).ToList();
return vendors;
}
将VendorsDictionary_Load
中的代码更改为:
public void VendorsDictionary_Load(object sender, EventArgs e)
{
var vendors = LoadVendors();
foreach (var thisVendor in vendors)
{
vendorPhones.Add(thisVendor.Name, thisVendor.Phone);
lvDisplay.Items
.Add(new ListViewItem(new[] { thisVendor.Name, thisVendor.City,
thisVendor.State, thisVendor.ZipCode }));
}
}
在任意位置使用LoadVendors
方法:
var someOtherUsage = VendorsDictionary.LoadVendors();
要改进此代码,请发送LoadVendors
的路径,以便从任何位置加载供应商。此外,VendorDictionary
不是表单的好名称。