C# Winforms CheckedListBox元素绑定到窗口标题

C# Winforms CheckedListBox元素绑定到窗口标题,c#,winforms,binding,C#,Winforms,Binding,我需要创建一个窗口来管理打开的对话框(隐藏、显示、添加新的、关闭)。我希望CheckedListBox的每个记录都是窗口的标题(someFormObject.Text)。如果标题改变了,我也想改变记录 现在我知道我可以为我的CheckedListBox创建一个数据源(字符串列表): _listRecords = new BindingSource(); checkedListBox1.DataSource = _listRecords; _listRecords.Add(newForm.Text

我需要创建一个窗口来管理打开的对话框(隐藏、显示、添加新的、关闭)。我希望CheckedListBox的每个记录都是窗口的标题(
someFormObject.Text
)。如果标题改变了,我也想改变记录

现在我知道我可以为我的
CheckedListBox
创建一个
数据源
(字符串列表):

_listRecords = new BindingSource();
checkedListBox1.DataSource = _listRecords;
_listRecords.Add(newForm.Text);

但这将使文本保持静态-当窗口标题更改时,文本不会更改。如何处理它?

您可以创建另一种类型的集合(如字典),并将窗口句柄存储为键,将文本存储为值。当表单标题更改时,您可以找到您的值并进行更新

    public Dictionary<IntPtr, string> forms = new Dictionary<IntPtr, string>();

    private void button1_Click(object sender, EventArgs e)
    {
        var newForm = new Form();
        newForm.Text = "New Form Text";

        forms.Add(newForm.Handle, newForm.Text);

        //look through our dictionary to find if the form exists
        //if it does, update the value, otherwise add a new entry
        if (forms.Keys.Contains(newForm.Handle))
            forms[newForm.Handle] = newForm.Text;
        else
            forms.Add(newForm.Handle, newForm.Text);

        RefreshDatasource();
    }

    private void RefreshDatasource()
    {
        checkedListBox1.DataSource = forms.ToList();
        checkedListBox1.DisplayMember = "Value";
    }
public Dictionary forms=new Dictionary();
私有无效按钮1\u单击(对象发送者,事件参数e)
{
var newForm=newForm();
newForm.Text=“新表单文本”;
添加(newForm.Handle、newForm.Text);
//查一下我们的字典,看看这个表格是否存在
//如果有,则更新该值,否则添加新条目
if(forms.Keys.Contains(newForm.Handle))
forms[newForm.Handle]=newForm.Text;
其他的
添加(newForm.Handle、newForm.Text);
刷新数据源();
}
私有数据源()
{
checkedListBox1.DataSource=forms.ToList();
checkedListBox1.DisplayMember=“Value”;
}
我找到了一种方法

实际上,您需要将实际的
表单
,而不是
字符串
添加到记录中(当您传递引用而不是值类型时)

私有绑定列表\u activeWindows;
//建造商:
checkedListBox1.DataSource=\u activeWindows;
checkedListBox1.DisplayMember=“Text”;
//添加新元素
_添加(新窗口);
绑定将自动更新所有内容

private BindingList<Form> _activeWindows;

// constructor:
checkedListBox1.DataSource = _activeWindows;
checkedListBox1.DisplayMember = "Text";

// adding new element
_activeWindows.Add(newWindow);