0

大家好,我有 2 个表格checkedListBox。在我的表单 1 上,我将选择一些并单击提交,我将在其中加载表单 2,再次在表单 2 上,我将拥有checkedListBox与第一个表单 1 中相同的项目。现在我想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

尝试使用此代码:

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 项目列表。

另一方面,这里是 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 回答
1

有很多方法可以解决这个问题。

首先,我假设 Form1 可以访问 Form2 对象。如果没有,则需要其他东西充当中间人来将检查状态数据从 Form1 获取到 Form2。

假设确实如此,您所需要的只是一个公共方法,例如:

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

或者您希望它起作用。我的快速解决方案是,在 Form1 中,我有一个按钮单击处理程序,它生成一个 Form2,显示它并设置列表。但无论如何......你只需要能够在两种形式之间传达这些状态。这是代码:

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 这样的模式并以不同的方式做事,但这会起作用。

如果您使用randomClass1类而不是我的List<bool>.

显然,在这里我做了一些假设,例如两个选中的列表框都有预先填充的项目,并且它们的顺序相同,等等。

您当然可以发送所有数据并动态创建项目。从您的问题中不清楚您在做什么,但我认为列表中已经填充了项目。

于 2012-09-06T13:26:03.493 回答