-1

我即将放弃这一点,我试图将一个字符串传递给另一个类,并在那个类中将它保存到一个列表中,但它就是不会这样做。我知道列表存在并且工作,因为我制作了一个将字符串放入该列表并将其显示在列表框中的按钮。但由于某种原因,我无法让它在传递的字符串上工作。

这是两个winforms,一个让用户提供信息,然后将其处理并传递给另一个类,然后将其保存到列表中,然后我调用更新,该更新应在列表框中显示列表。

Mainform(带有列表框的那个)

public partial class MainForm : Form
{        

    List<string> m_customers = new List<string>();    


    public MainForm()
    {
        InitializeComponent();            
    }


    public void StringToList(string strnew)
    {           
        m_customers.Add(strnew);
        Updatelistbox();

        foreach (string custom in m_customers)
        {
            lstRegistry.Items.Add(custom);
        }
    }

    private void strtest(string strnew)
    {
        string userinfo = strnew;
        m_customers.Add(userinfo);
    }

    private void Updatelistbox()
    {
        lstRegistry.Items.Clear();
        for (int index = 0; index < m_customers.Count; index++)
        {
            lstRegistry.Items.Add(m_customers[index]);
        }
    }      

    private void button1_Click(object sender, EventArgs e)
    {
        using (ContactForm frm = new ContactForm())
        {
            frm.ShowDialog();
        }
    }


    private void button2_Click(object sender, EventArgs e)
    {                 
        lstRegistry.Items.Add("Hey this works atleast...");

        m_customers.Add("add this to List");  //This works as this line becomes more and more.
        foreach (string custom in m_customers)
        {
            lstRegistry.Items.Add(custom);
        }        
    }
}

输入表单

public partial class ContactForm : Form
{
    private ContactFiles.Contact m_contact = new ContactFiles.Contact();
    private ContactFiles.Email m_email = new ContactFiles.Email();
    private ContactFiles.Phone m_phone = new ContactFiles.Phone();
    private ContactFiles.Adress m_adress = new ContactFiles.Adress();

    private bool m_closeForm;

    public ContactForm()
    {

        InitializeComponent();

        InitializeGUI();
    }

    private void InitializeGUI()
    {
        txtFirstName.Text = string.Empty;
        txtLastName.Text = string.Empty;
        txtHomePhone.Text = string.Empty;
        txtCellPhone.Text = string.Empty;
        txtEmailBusiness.Text = string.Empty;
        txtEmailPrivate.Text = string.Empty;
        txtStreet.Text = string.Empty;
        txtCity.Text = string.Empty;
        txtZipCode.Text = string.Empty;
        FillCountryComboBox();
        cmbCountries.Items.AddRange(FillCountryComboBox()); cmbCountries.SelectedIndex = 5;
        m_closeForm = true;
    }


    public string[] FillCountryComboBox()
    {
        string[] m_countryStrings = Enum.GetNames(typeof(Countries));

        for (int index = 0; index < m_countryStrings.Length - 1; index++)
        {
            m_countryStrings[index] = m_countryStrings[index].Replace("_", " ");
        }
        return m_countryStrings;
    }

    private void btnOK_Click(object sender, EventArgs e)
    {           
        string a_country = cmbCountries.SelectedItem.ToString();
        var oAdress = new ContactFiles.Adress(txtStreet.Text, txtCity.Text, txtZipCode.Text, a_country);
        string adresslist = oAdress.ToString();            
        var oEmail = new ContactFiles.Email(txtEmailBusiness.Text, txtEmailPrivate.Text);
        string emaillist = oEmail.ToString();            
        var oPhones = new ContactFiles.Phone(txtHomePhone.Text, txtCellPhone.Text);
        string phonelist = oPhones.ToString();
        //This is actually working, the string is passed OK.            
        //MainForm strin = new MainForm();            
        var oContact = new ContactFiles.Contact(txtFirstName.Text, txtLastName.Text);
        string namelist = oContact.ToString();

        //Create string from input and send to MainForm.StringToList()
        MainForm instance = new MainForm();
        string strnew = string.Format("{0,-3} {1, -10} {2, -20} {3, -30}", namelist, phonelist, emaillist, adresslist);
        instance.StringToList(strnew);


        this.Close();
    }

    private ContactFiles.Contact Contacts
    {
        get { return m_contact; }
        set
        {
            if (value != null)
                m_contact = value;                
        }
    }

    public ContactFiles.Email Email
    {
        get { return m_email; }
        set 
        {
            if (value != null)
            m_email = value; 
        }
    }

    public ContactFiles.Phone Phone
    {
        get { return m_phone; }
        set
        {
            if (value != null)
                m_phone = value;
        }
    }

    private ContactFiles.Adress Adress
    {
        get { return m_adress; }
        set
        {
            if (value != null)
                m_adress = value;
        }
    }

    private void ContactForm_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (m_closeForm)
            e.Cancel = false;  //Close the Contact form.
        else
            e.Cancel = true; //Do not close (user has chosen Cancel)
    }      
}

正如您所看到的,还有一些处理包含构造函数的用户输入的类,但它们都可以工作,因为我可以从所有用户输入中创建字符串,但后来我失败了,现在就像 3 天一样,我仍然可以找不到问题。:'(

关于如何解决我的问题的任何想法?!?我只是找不到问题。

4

2 回答 2

2
 MainForm instance = new MainForm();
    string strnew = string.Format("{0,-3} {1, -10} {2, -20} {3, -30}", namelist, phonelist, emaillist, adresslist);
    instance.StringToList(strnew);

这是不好的。您正在创建一个新的主表单实例(带有新列表),而不是使用旧的。在联系表的建造者中传递列表并在那里增加价值。

List<string> m_customers;

public ContactForm(List<string> list) : this()
{
   m_customers = list;
}

创建表单代码

private void button1_Click(object sender, EventArgs e)
{
    using (ContactForm frm = new ContactForm(m_customers))
    {
        frm.ShowDialog();
    }
}

现在您可以将值添加到列表中。

更新:将您的 StringToList 方法带入联系表单,将其设为私有并在联系表单实例中使用。

于 2012-08-07T20:58:03.823 回答
1

您可以尝试使您的主表单具有输入表单的实例,反之亦然。主要形式最终将保存数据。让输入表单成为一个新实例并以这种方式返回值。

于 2012-08-07T20:58:14.770 回答