Выбор флажков отмеченных элементов

Я пытался поискать решение своей проблемы, но не смог его найти, поскольку кажется, что каждый на шаг или два опережает мою проблему.

Я пытаюсь выбрать элемент из списка флажков, а не выбирать элемент из него.

Зная это, я намереваюсь сделать результирующее событие, которое сработает после нажатия кнопки и проверки проверенных параметров, чтобы отобразить текст в метке отмеченных элементов.

Программа, основанная на шаблоне декоратора, позволит пользователю выбирать из набора 3/4 проверяемых параметров, из которых при нажатии кнопки будет отображаться текст, относящийся к этим элементам, в метке в конце основного текста. На данный момент все, что мне удалось, это заставить его делать это для выбранного элемента по одному, только аналогично первому примеру.

Например, если установлен флажок «Монитор», он будет отображаться в метке:

Вы получаете компьютер и монитор.

Если есть несколько проверенных элементов, таких как «Монитор» и «Клавиатура», будет сказано:

Вы получаете компьютер, монитор и клавиатуру.


person madman    schedule 23.12.2012    source источник
comment
Просто хочу уточнить, вы хотите инициировать список на основе события флажка?   -  person bonCodigo    schedule 23.12.2012
comment
Да, приложение Windows Forms. Список опций генерируется при запуске приложения, пользователь нажимает кнопку, для которой запускается описанное событие, текст, отображаемый в метке в соответствии с отмеченной опцией.   -  person madman    schedule 23.12.2012


Ответы (1)


Вы можете изменить свойство Label.Text цели Label, когда событие ItemCheck цели CheckedListBox запускается на основе нового проверенного значения элемента.

Пример

Если у вас есть Label с именем label1, CheckedListBox с именем checkedListBox1 и Form с именем 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, 

Спасибо,
Надеюсь, вы найдете это полезным :)

person Picrofo Software    schedule 23.12.2012
comment
Вторая строка этого кода дала мне 5 ошибок: 1. «Decorator_Pattern.Form1.checkedListBox1» — это «поле», но используется как «тип». 2. «Decorator_Pattern.Form1.checkedListBox1_ItemCheck(object, System.Windows.Forms.ItemCheckEventArgs)» — это «метод», но используется как «тип». 3. Ожидаемый идентификатор (для последней скобки). 4. Недопустимый токен '+=' в объявлении класса, структуры или интерфейса. 5. Метод должен иметь возвращаемый тип (для ItemCheckEventHandler) - person madman; 23.12.2012
comment
@SergioJanuario Вы должны сделать это под public Form1() после InitializeComponent();. Хорошего дня :) - person Picrofo Software; 23.12.2012
comment
Спасибо, что прояснили это, теперь работает. Спасибо вам за помощь. - person madman; 23.12.2012
comment
Сначала я собираюсь немного поиграть с ним, чтобы убедиться, что это то, что я искал, прежде чем делать что-то еще. Он работает нормально, но я не уверен, что это то, что я ищу, поскольку он, кажется, обходит способ работы шаблона декоратора, и это то, что я пытаюсь создать и сохранить в этом приложении. Не спал всю ночь, не уверен, сколько еще я смогу не спать, чтобы поиграть с ним (моя причина, если я не отвечу на комментарий в ближайшее время). - person madman; 23.12.2012
comment
@SergioJanuario Надеюсь, вы решите свою проблему как можно скорее. Пожалуйста, дайте мне знать, если я могу сделать что-нибудь еще :) - person Picrofo Software; 23.12.2012
comment
Есть ли способ, где вместо ToString, используемого для получения текста, вместо этого можно использовать другую переменную? Я спрашиваю, потому что я использую один из них в моем коде под названием description, который содержит/возвращает весь необходимый текст, который будет отображаться в метке, которая, если бы она использовалась вместо ToString, по моему мнению, более точно соответствовала бы шаблону декоратора, поскольку ToString можно было бы использовать без использование структуры шаблона декоратора, в то время как мое описание не могло. - person madman; 24.12.2012
comment
@SergioJanuario Не совсем уверен, что вы имеете в виду, но мы использовали ToString() для преобразования object в string. Вы наверняка можете сделать что-то вроде string myString = checkedListBox1.Items[e.Index].ToString();, чтобы получить строку имени myString в качестве значения элемента. Хорошего дня :) - person Picrofo Software; 24.12.2012
comment
Он по-прежнему использует значения ToString, что я хотел бы сделать, так это иметь возможность установить, какой текст выходит из каждой опции, которую можно выбрать с помощью значения, отличного от того, что хранится в значении ToString. Используемый мной код, который я пытался использовать для этого, выглядит следующим образом: Computer computer = new Computer(); string myString = checkedListBox1.Items[e.Index].ToString(); myString = computer.description(); - person madman; 26.12.2012
comment
Описание возвращает набор текста, отличный от того, что было установлено для ToString каждой опции, и это то, что я хотел бы использовать вместо этого, если это вообще возможно. - person madman; 26.12.2012
comment
@SergioJanuario Непонятно, что вы пытаетесь сделать. Не стесняйтесь задать новый вопрос, который более четко описывает вашу проблему. Счастливых праздников! :) - person Picrofo Software; 26.12.2012