更改checkedListBox的ToString值

时间:2012-12-27 20:49:35

标签: c# tostring checkedlistbox

目前正在基于C#中的装饰器模式创建一个Windows窗体应用程序。该程序的结构是将一个主类(“计算机”)扩展到其他类(作为包装器),形成可用的选项。

问题:使用checkboxlist,用户可以选择在选项之间进行选择,这些选项会使每个选项特定的文本在选中时显示在一个标签中,无论是否只有一个(仅在标签文本后显示选中的选项文本) )或全部检查(所有选中的选项文本将在标签文本后一个接一个地显示)。以下代码显示标签中选中的最新选项的设置文本,如果用户取消选中所有选项,则不删除文本。

foreach (object itemChecked in checkedListBox1.CheckedItems)
        {
            Computer computer = (Computer)itemChecked;
            label1.Text = "" + computer.description();
        } 

这个问题在这里解决了,但是解决方案用ToString替换了“description”。我的问题是,我希望在标签中的文本中使用“description”中的内容而不是ToString中保存的内容,该内容用于命名每个选中的选项。下面是来自主类(计算机)的代码示例:

public virtual String description()
    {
        return "Currently in basket is a Computer ";
        //return this.ToString();
    }

public override string ToString()
    {
        return "Desktop";
    }

背后的原因是保持装饰器模式结构,ToString绕过它,因为它可以在没有装饰器模式结构的情况下以相同的方式使用。之前提到的解决方案如下:

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
    if (e.NewValue == CheckState.Checked && e.CurrentValue == CheckState.Unchecked) //Continue if the new CheckState value of the item is changing to Checked
    {
        label1.Text += "a " + checkedListBox1.Items[e.Index].ToString() +", "; //Append ("a " + the item's value + ", ") to the label1 Text property
    }
        else if (e.NewValue == CheckState.Unchecked && e.CurrentValue == CheckState.Checked) //Continue if the new CheckState value of the item is changing to Unchecked
        {
            label1.Text =  label1.Text.Replace("a " +checkedListBox1.Items[e.Index].ToString() + ", ", ""); //Replace ("a " + the item's value + ", ") with an empty string and assign this value to the label1 Text property
        }
}

一个解决方案,我认为在另一个主题上找到(不能完全记住),更接近我正在寻找的内容,下面,使用“description”作为标签的值,而ToString保持为值的选项。但是,此代码带来的错误是没有“CheckedItem”的定义,也没有任何扩展方法的名称相同(第四行末尾):

for (int i = 0; i < checkedListBox1.Items.Count; i++)
            if (checkedListBox1.GetItemChecked(i))
            {
                Computer computer = (Computer)checkedListBox1.CheckedItem;
                label1.Text = "" + computer.description();
            }
            else
            {
                label1.Text = "";
            }

P.S。我是新手/初学者程序员,请原谅任何不一致或解释不当的部分。谢谢。

1 个答案:

答案 0 :(得分:1)

如果我很清楚你想要做什么,那么你需要创建一个返回Computer.ToString()的公共函数:

public string Description(){
    return this.ToString();
}

protected override ToString(){
    /// and here goes the code you need.
}