0

我试图四处寻找解决我的问题的方法,但没有找到一个,因为似乎每个人都比我的问题提前一两步。

我正在尝试从复选框列表中选择一个项目,而不是从中选择一个项目。

我打算这样做是为了使结果事件在单击按钮并选中选中的选项后触发,以在选中项目的标签中显示文本。

该程序基于装饰器模式,将允许用户从一组 3/4 可检查选项中进行选择,当按下按钮时,这些选项将在基本文本末尾的标签中显示与这些项目相关的文本。目前,我所做的只是让它在选定的项目上一次执行一个,仅类似于第一个示例。

例如,当一个名为 Monitor 的选项被选中时,它会显示在标签中:

你得到一台电脑和一台显示器。

如果有多个检查项目,例如监视器和键盘,那么它会说:

你得到一台电脑、一台显示器和一个键盘。

4

1 回答 1

0

您可以在触发事件时根据新的选中项值更改Label.Text目标的属性。LabelItemCheckCheckedListBox

例子

假设您有 a Labelof name label1、 a CheckedListBoxof namecheckedListBox1和 a Formof name Form1,以下可能适用

public class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        label1.Text = "You are getting "; //Change the Text property of label1 to "You are getting "
        checkedListBox1.ItemCheck += new ItemCheckEventHandler(checkedListBox1_ItemCheck); //Link the ItemCheck event of checkedListBox1 to checkedListBox1_ItemCheck; not required as long as you link the event through the designer
    }
    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
        }
    }
}

样本输入

[x] Monitor
[x] Keyboard
[ ] Mouse
[x] Computer

样本输出

You are getting a Monitor, a Keyboard, a Computer, 

谢谢,
我希望你觉得这有帮助:)

于 2012-12-23T09:44:58.540 回答