C# 将方法更改为以其他形式访问的共享方法

C# 将方法更改为以其他形式访问的共享方法,c#,winforms,dictionary,methods,C#,Winforms,Dictionary,Methods,我之前创建了一个程序,它将文本文件中的数据显示到listview中,用户可以单击listview中的某个名称,并显示该名称的电话号码。现在我正在尝试向程序添加一个新表单,允许用户从组合框中选择一个名称,然后在文本框中显示该名称,并允许用户更改名称并将其保存在文本文件中 不管怎么说,我试图以新的形式访问原始程序中的load事件,但我似乎不知道如何做到这一点。这是我的密码: public partial class VendorsDictionary : Form { public Ven

我之前创建了一个程序,它将文本文件中的数据显示到listview中,用户可以单击listview中的某个名称,并显示该名称的电话号码。现在我正在尝试向程序添加一个新表单,允许用户从组合框中选择一个名称,然后在文本框中显示该名称,并允许用户更改名称并将其保存在文本文件中

不管怎么说,我试图以新的形式访问原始程序中的load事件,但我似乎不知道如何做到这一点。这是我的密码:

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();
    }
}
公共部分类VendorsDictionary:表单
{
公共供应商词典()
{
初始化组件();
}
专用词典供应商电话=新词典();
公共无效供应商字典加载(对象发送方,事件参数e)
{
串电流线;
字符串[]字段=新字符串[2];
StreamReader vendorReader=新的StreamReader(“Vendor.txt”);
while(vendorReader.EndOfStream==false)
{
currentLine=vendorReader.ReadLine();
字段=currentLine.Split(',');
添加(字段[1],字段[6]);
字符串[]名称={fields[1]};
字符串[]city={fields[3]};
字符串[]状态={fields[4]};
字符串[]zipcode={fields[5]};
字符串[]phone={fields[6]};
for(int i=0;i0)
{
ListViewItem item=lvDisplay.SelectedItems[0];
lblName.Text=item.SubItems[0]。Text;
lblPhone.Text=vendorPhones[item.SubItems[0].Text];
} 
}
私有void b更新\单击(对象发送者,事件参数e)
{
UpdateVendor UpdateVendor=新的UpdateVendor();
updateVendor.Show();
}
}

我试着把它改成静态的,还有一些我在这里找到的其他想法,但似乎无法让它工作。任何帮助都将不胜感激

VendorsDictionary\u 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;
}
在任何需要的地方使用
LoadVendors
方法:

var someOtherUsage = VendorsDictionary.LoadVendors();

要改进此代码,请发送路径至
LoadVendors
,以便您可以从任何位置加载供应商。另外,
VendorDictionary
不是表单的好名称。

那么为什么需要
VendorDictionary\u Load
函数呢?假设此函数只将结果保存到
lvDisplay
UpdateVendor
表单上创建公共属性的可能副本(我们将其称为
public string Name;
,并将其设置为组合框所选项(Name)。然后使用
UpdateVendor.ShowDialog();
启动表单(
ShowDialog())
将阻止在您的
VendorsDictionary
表单上执行,直到
UpdateEndor
表单关闭。然后您可以检查
UpdateEndor.Name
属性,您就有了用户选择的名称。@RufusL如何将其设置为combobox所选项目?是否需要用nam填充comboboxes?很抱歉,如果这是一个愚蠢的问题,我刚刚开始学习如何编码=/Oh,我发现我误解了整个问题。我稍后会尝试发布一个答案,但基本上答案都是类似的。您可以在第一个表单上公开该方法(可能不是整个表单加载方法,而是返回名称的其他方法),然后将form1的实例传递给form2。或者,获取form1中的名称列表,然后将该列表作为form2方法的参数或form2属性传递给form2。
var someOtherUsage = VendorsDictionary.LoadVendors();