C# 如何从另一个窗体访问选中的项目?

C# 如何从另一个窗体访问选中的项目?,c#,C#,我有两张表格:表格一和表格二 表单1包含按钮1和列表框1,表单2包含按钮2和选中列表框1 单击按钮1时,必须打开表单2,并检查选中列表框1的项目。然后单击按钮2以便表单2关闭并且列表框1必须显示选中列表框1中的选中项目。但问题是我无法将选中的项目从checkedlistbox1复制到listbox1。我如何才能做到这一点,请帮助。因此,我们将首先将此属性添加到表单2。这将是沟通的重点: public IEnumerable<string> CheckedItems { get

我有两张表格:表格一和表格二

表单1包含
按钮1
列表框1
,表单2包含
按钮2
选中列表框1


单击
按钮1
时,必须打开
表单2
,并检查
选中列表框1
的项目。然后单击
按钮2
以便
表单2
关闭并且
列表框1
必须显示
选中列表框1
中的选中项目。但问题是我无法将选中的项目从
checkedlistbox1
复制到
listbox1
。我如何才能做到这一点,请帮助。

因此,我们将首先将此属性添加到
表单2
。这将是沟通的重点:

public IEnumerable<string> CheckedItems
{
    get
    {
        //If the items aren't strings `Cast` them to the appropirate type and 
        //optionally use `Select` to convert them to what you want to expose publicly.
        return checkedListBox1.SelectedItems
            .OfType<string>();
    }
    set
    {
        var itemsToSelect = new HashSet<string>(value);

        for (int i = 0; i < checkedListBox1.Items.Count; i++)
        {
            checkedListBox1.SetSelected(i,
                itemsToSelect.Contains(checkedListBox1.Items[i]));
        }
    }
}

当我们单击按钮时,我们创建第二个表单的实例,设置它的选定索引,向
FormClosed
事件添加一个处理程序,用新的选择更新列表框,然后显示表单。您将注意到,设置
列表框
项的方法的实现与
CheckedItems
设置
方法的模式完全相同。如果你发现自己做了很多事情,考虑把它分解成一个更通用的方法。

,所以我们将从这个属性添加到<代码> Frave开始。这将是沟通的重点:

public IEnumerable<string> CheckedItems
{
    get
    {
        //If the items aren't strings `Cast` them to the appropirate type and 
        //optionally use `Select` to convert them to what you want to expose publicly.
        return checkedListBox1.SelectedItems
            .OfType<string>();
    }
    set
    {
        var itemsToSelect = new HashSet<string>(value);

        for (int i = 0; i < checkedListBox1.Items.Count; i++)
        {
            checkedListBox1.SetSelected(i,
                itemsToSelect.Contains(checkedListBox1.Items[i]));
        }
    }
}

当我们单击按钮时,我们创建第二个表单的实例,设置它的选定索引,向
FormClosed
事件添加一个处理程序,用新的选择更新列表框,然后显示表单。您将注意到,设置
列表框
项的方法的实现与
CheckedItems
设置
方法的模式完全相同。如果你发现自己做了很多事情,考虑将它分解成一个更通用的方法。< /p> @拉齐贝佐夫茨基:请不要编辑其他用户的答案中的代码,只是按照你习惯的编码惯例。如果有问题,那就不一样了,但是仅仅为了使用您喜欢的命名约定而进行编辑并不是建议编辑的目的。我以为您有打字错误,因为
\uuuu
是我从未见过的名称before@lazyberezovsky下划线
\uuu
是C#中变量的完全有效标识符。按照惯例,它用于表示lambda的未使用参数。它只是为了确保它与代理的签名匹配。如果我真的使用它(我永远不会,因为我已经有了一个表示另一种形式的强类型变量),我会给它一个不同的名称。
args
也是未使用的参数Holy nice code,Batman!“of type”和lambdas的使用非常酷。@lazyberezovsky请不要仅仅为了遵循您习惯的编码惯例而编辑其他用户答案中的代码。如果有问题,那就不一样了,但是仅仅为了使用您喜欢的命名约定而进行编辑并不是建议编辑的目的。我以为您有打字错误,因为
\uuuu
是我从未见过的名称before@lazyberezovsky下划线
\uuu
是C#中变量的完全有效标识符。按照惯例,它用于表示lambda的未使用参数。它只是为了确保它与代理的签名匹配。如果我真的使用它(我永远不会,因为我已经有了一个表示另一种形式的强类型变量),我会给它一个不同的名称。
args
也是未使用的参数Holy nice code,Batman!“of type”和lambdas的使用非常酷。