3

別のフォームからリストボックスに項目を追加しようとしています。Form1 には「ダミー」アイテムを含むリストボックスがあり、そのフォームからさらにアイテムを追加しようとすると、すべて正常に動作します。しかし、別のフォーム (AddContact.cs) からアイテムを追加しようとすると、アイテムが追加されません。両方のフォームからコードを提供します。

PS: リストボックスはパブリックに設定され、Form1 の外部からアクセスできるようになっています。

フォーム1:

    public Form1()
    {
        InitializeComponent();
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        list_names.Items.Add("Dummy");
    }

    private void btn_check_Click(object sender, EventArgs e)
    {
        if (list_names.SelectedItem == null)
        {
            MessageBox.Show("No item has been selected.", "Error",
                MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
        else if (list_names.SelectedItem.ToString() == "Dummy")
        {
            //Dummy code for testing
            MessageBox.Show("Dummy has been selected!");
        }
    }

    private void btn_add_Click(object sender, EventArgs e)
    {
        new AddContact().Show();
    }

    private void btn_remove_Click(object sender, EventArgs e)
    {
        //TODO: Remove items from listbox
    }

連絡先を追加:

    Form1 form;

    public AddContact()
    {
        InitializeComponent();
        form = new Form1();
    }

    private void btn_add_Click(object sender, EventArgs e)
    {
        if (textBox1.Text == string.Empty)
        {
            MessageBox.Show("No input has been given.");
        }
        else
        {
            //This doesn't work
            string s = textBox1.Text;
            form.list_names.Items.Add(s);
            textBox1.Text = "";
        }
    }
4

4 に答える 4

0
public partial class Form1 : Form
{
    public static List<string> lst=new List<string>();
    private void Form1_Load(object sender, EventArgs e)
    {
          if (lst != null)
            listBox1.DataSource = lst;
    }
}


public partial class Form2 : Form
{
       private void button1_Click(object sender, EventArgs e)
       {             
         Form1.lst.Add(textBox1.Text);
         textBox1.Text = string.Empty;
       }
 } 
于 2012-10-10T13:07:15.470 に答える
0

問題は、 で新しいフォームを作成することです。AddContactへの参照が必要ですForm1

Form1 form;

public AddContact(Form1 frm)
{
    InitializeComponent();
    form = frm;
}

そしてまた

private void btn_add_Click(object sender, EventArgs e)
{
    new AddContact(this).Show();
}
于 2012-10-10T11:50:10.163 に答える
0

ちょっとした回避策はイベントハンドラです

独自の EventArgs を派生させるだけです

public class AddItemEventArgs : EventArgs
{
    public string Item { get; set; } 
}

このコードを AddContanct-Form に追加します。

public event EventHandler OnAddItemNeeded(object sender, AddItemEventArgs);

メソッドでは、btn_add_clickこのイベントをトリガーする必要があります。

this.OnAddItemNeeded(this, new AddItemEventArgs() { Item = textBox1.Text });

Form1 で AddContact の新しいインスタンスを呼び出す場合:

AddContact ac = new AddContact();
ac.OnAddItemNeeded += new EventHandler(this.OnAddItemNeeded);
ac.Show();

そして、Form1 内で作業を行うハンドラー:

private void OnAddItemNeeded(object sender, AddItemEventArgs e)
{
    list_names.Items.Add(e.Item);
}
于 2012-10-10T11:56:05.610 に答える
-1

問題は、AddContact コンストラクターで Form1 を初期化することです。

これを試して:

連絡先を追加:

Form1 form;

public AddContact(Form1 f)
{
    InitializeComponent();
    form = f;
}

private void btn_add_Click(object sender, EventArgs e)
{
    if (textBox1.Text == string.Empty)
    {
        MessageBox.Show("No input has been given.");
    }
    else
    {
        string s = textBox1.Text;
        form.list_names.Items.Add(s);
        textBox1.Text = "";
    }
}

そしてボタンを追加します:

private void btn_add_Click(object sender, EventArgs e)
{
    new AddContact(this).Show();
}
于 2012-10-10T11:50:20.497 に答える