0

こんにちは、私は で 2 つのフォームを持っていcheckedListBoxます。form1 でいくつかを選択し、送信をクリックして form2 をロードします。再び Form2checkedListBoxで、最初の form1 と同じ項目を持ちます。checkedListBoxここで、form1 の選択リストに従ってform2 を確認したいと思います。

次のコードを試しました

public class randomClass1
    {
        public bool IsChecked { get; set; }
        public string Name { get; set; }
        public randomClass1()
        {
            this.IsChecked = true;
            Name = "name1";
        }
    }

form1のボタンクリックイベントは次のとおりです

 private void button1_Click(object sender, EventArgs e)
    {
        frmChild1 frm = new frmChild1();

        List<randomClass1> lst = new List<randomClass1>();

        for (int i = 0; i < checkedListBox1.Items.Count; i++)
        {
            lst.Add(new randomClass1());
        }

        for (int i = 0; i < checkedListBox1.Items.Count; i++)
        {
            randomClass1 obj = (randomClass1)checkedListBox1.Items[i];
            if (checkedListBox1.GetItemChecked(i))
            {
                checkedListBox1.SetItemChecked(i, obj.IsChecked);
            }
            else
            {
                obj.IsChecked = false;
                checkedListBox1.SetItemChecked(i, obj.IsChecked);
            }
        }

        frm.loadFrom(lst); //unable to retrieve the same when I checked 
        //frm.loadFrom(lst);
        frm.Show();
    }

form2で同じクラスを作成しようとしましたが、そのクラスにアクセスできません。選択したアイテムを取得するためにform2で何をコーディングすればよいか教えてください。

4

2 に答える 2

1

この問題を解決するには、いくつかの方法があります。

まず、Form1 が Form2 オブジェクトにアクセスできると仮定しています。そうでない場合は、Form1 から Form2 に checkstate データを取得するために、他の何かが仲介者として機能する必要があります。

あると仮定すると、必要なのは次のような public メソッドだけです。

public void SetList(List<bool> checkmarks)
{
    for (int i = 0; i < checkmarks.Count; ++i)
    {
        checkedListBox1.SetItemChecked(i, checkmarks[i]);
    }
}

または、それを機能させたい場合。私の簡単な解決策は、Form1 に Form2 を作成し、それを表示してリストを設定するボタン クリック ハンドラがあることです。しかし、とにかく... 2 つのフォーム間でこれらの状態を通信できる必要があります。そのコードは次のとおりです。

private void button1_Click(object sender, EventArgs e)
{
    var list = new List<bool>();
    for (int i = 0; i < checkedListBox1.Items.Count; ++i)
    {
        list.Add(checkedListBox1.GetItemChecked(i));
    }
    Form2 f2 = new Form2();
    f2.Show();
    f2.SetList(list);
}

本番コードでは、おそらく MVC のようなパターンを選択して、別の方法で処理しますが、これは機能します。

my ではなくrandomClass1クラスを使用する場合、考え方は同じですList<bool>

明らかに、ここでは、両方のチェックリストボックスに事前に入力されたアイテムがあり、それらが同じ順序になっているなどの仮定を立てました。

確かに、そのすべてのデータを送信して、項目を動的に作成することもできます。あなたの質問からは、あなたが何をしているのか明確ではありませんでしたが、リストにはすでに項目が入力されていると思いました.

于 2012-09-06T13:26:03.493 に答える
1

このコードを使用してみてください:

void button1_Click(object sender, EventArgs e) {
  List<randomClass1> items = new List<randomClass1>();
  for (int i = 0; i < checkedListBox1.Items.Count; ++i) {
    randomClass1 rc = new randomClass1();
    rc.Name = checkedListBox1.Items[i].ToString();
    rc.IsChecked = checkedListBox1.GetItemChecked(i);
    items.Add(rc);
  }
  frmChild1 frm = new frmChild1();
  frm.LoadFrom(items);
  frm.Show();  
}

これにより、randomClass アイテムのリストに、リスト ボックスのテキストとチェックされた値が入力されます。

反対に、2 番目のフォームにそのリストを再設定する LoadFrom メソッドを次に示します。

public void LoadFrom(List<randomClass1> items) {
  for (int i = 0; i < items.Count; ++i) {
    randomClass1 rc = items[i];
    checkedListBox1.Items.Add(rc.Name);
    checkedListBox1.SetItemChecked(i, rc.IsChecked);
  }
}
于 2012-09-06T13:25:10.200 に答える