0

ListView がオンになっているフォームとは別のフォームのボタンをクリックすると、ListView にデータを入力しようとしています。Form2 で使用する Form1 のメソッドを作成し、Form1 のメソッドにパラメーターを渡し、ListView に入力します。デバッグすると、すべての正しい値が渡されますが、ListView にはまだ値が入力されていません。ListView の Modifier プロパティを Public に設定するかどうかに関係なく、簡単にするために私が馬鹿にしたコードを次に示します。

Form1 (ListView と Form2 を開くボタンのみがあります)

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public void setLvi(string name, string age, string dob)
        {
            ListViewItem lvi = new ListViewItem(name);
            lvi.SubItems.Add(age);
            lvi.SubItems.Add(dob);
            listView1.Items.Add(lvi);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 fm3 = new Form2();
            fm3.Show();
        }
    }
}

フォーム 2 (ListView に入力するボタンしかありません)

namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form1 fm2 = new Form1();
            string name2 = "Chris";
            string age2 = "23";
            string dob2 = "12/19/1989";
            fm2.setLvi(name2, age2, dob2);
        }
    }
}
4

1 に答える 1

2

簡単に言えForm1ば、作成している新しいものが表示されていないため、リスト ビューに加えた変更はフォームの視覚的表現に反映されません。したがって、あなたが持っているコードを保持することができますが、ボタン ハンドラーで作成し.Show()fm2オブジェクトを呼び出すことができますが、これに対するアプローチを再考することをお勧めしますForm1。それらが存在する場合、または存在するときに入力される可能性があります。

代わりにこれを考慮してください:

Form2Form1別のインスタンスを新しく作成しているため、あなたが思っているものとは異なるインスタンスがありForm1ます。

private void button1_Click(object sender, EventArgs e)
{
    // fm2 is not the same Form1 that created this Form2 object
    Form1 fm2 = new Form1();
    string name2 = "Chris";
    string age2 = "23";
    string dob2 = "12/19/1989";
    fm2.setLvi(name2, age2, dob2);
}

代わりにこれを行います:

public partial class Form2 : Form
{
    public Form1 TheForm1 { get; set; }

    public Form2(Form1 _form1)
    {
        TheForm1 = _form1;
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        string name2 = "Chris";
        string age2 = "23";
        string dob2 = "12/19/1989";
        TheForm1.setLvi(name2, age2, dob2);
    }
}

のコンストラクターを変更してForm2、 のインスタンスを受け入れるようにしました。これForm1は、 プロパティ に保存されます。これにより、クラスでメソッドTheForm1を呼び出すことができます。setLviForm1

ここでForm2、次のように をインスタンス化する方法を変更する必要があります。

private void button1_Click(object sender, EventArgs e)
{
    Form2 fm3 = new Form2(this);
    fm3.Show();
}

注:thisは現在のクラスのインスタンスを表します。これは、オブジェクトForm1を新しく作成しているときにそのクラスにいるためです。Form2

于 2013-08-11T02:20:00.277 に答える