在Windows窗体中使用自定义控件选中列表框

时间:2013-12-16 09:20:15

标签: c# winforms user-controls listbox

Windows窗体中已检查列表框控件的Items属性是object类型,所以我天真的希望是我可以添加自定义用户控件作为项目。 (因为,通常,我的任务是编写后台任务的逻辑,我对UI编程不太熟悉,所以这可能是一个愚蠢的想法..)

更准确地说,我想在选中列表框的每一行显示两个标签和一个按钮。第一个标签应该显示用户可以选择的对象的名称(以便稍后将对所有选中的项执行特定操作)。对于任何选中的项目,该按钮应该允许用户选择一个文件,从中可以读取自定义设置以执行该操作,第二个标签应该显示用户使用按钮做出的选择(即文件名或其他内容)喜欢字符串“默认设置”)。

所以,在形式设计师,我创建自定义控制CustomControl1label1label2button1,和方法来设置文本属性,设置自动调整大小的标签和按钮为false,手动定义其大小。然后在主窗口中创建了选中的列表框,我添加了自定义控件。我的主窗口的构造函数现在看起来如下:

        InitializeComponent();

        UserControl1 uc1 = new UserControl1();
        uc1.setLabel1("label1_text");
        uc1.setLabel2("label2_text");
        uc1.setButtonText("button_text");

        this.checkedListBox1.Items.Add(uc1);

        uc1.Visible = true;

此编译没有任何错误并且也运行,但是选中的列表框显示一个空字段。我还试验了列表框的大小。如果我减小高度以便复选框恰好适合它,那么我确实看到相应行中的按钮片段,但没有标签。

是否可以在选中的列表框中使用自定义表单?如果是,我缺少什么?

2 个答案:

答案 0 :(得分:2)

不,你不能这样做。

列表框仅显示元素列表。列表框对列表中的每个对象使用属性.ToString()来显示项目。

您需要寻找custom listbox

答案 1 :(得分:0)

private void Form1_Load(object sender,EventArgs e)
    {
        checkedListBox1.Items.Add("IIT");
        checkedListBox1.Items.Add("CSE");
        checkedListBox1.Items.Add("EEE");
        checkedListBox1.Items.Add("ICT");
        checkedListBox1.Items.Add("URP");
        checkedListBox1.Items.Add("ENGLISH");
        checkedListBox1.Items.Add("BANGLA");
        checkedListBox1.Items.Add("MATH");
    }
    private void checkedListBox1_SelectedIndexChanged(object sender,EventArgs e)
    {
        //var item=checkedListBox1.SelectedItem;

        label1.Text=checkedListBox1.SelectedItem.ToString();
    }