Как сохранить объект флажка в списке?

Я борюсь с CheckBox на C#

 public formPCRBaseline(List<GetBaselineSectionTasks> m_objPCRCheck)
 {
     setDefaults(m_objPCRCheck);
 }

 private void setDefaults(List<GetBaselineSectionTasks> m_objPCRCheck)
 {
     richTextBoxPCRBaseline.BackColor = Color.White;

     foreach (GetBaselineSectionTasks i_objPCRCheck in m_objPCRCheck)
     {
         richTextBoxPCRBaseline.SelectionIndent = 0;
         CheckBox checkBox = new CheckBox();
         checkBox.Height = 20;
         checkBox.Width = 20;
         richTextBoxPCRBaseline.Controls.Add(checkBox);
         checkBox.Tag = i_objPCRCheck;
         richTextBoxPCRBaseline.SelectionIndent = 30;
         richTextBoxPCRBaseline.SelectedText = "Section : '" + i_objPCRCheck.taskname;
         richTextBoxPCRBaseline.SelectedText = "\n\n";
     }
}

Итак, этот код возвращает мне список объектов с некоторым флажком, и я хотел бы установить флажок, когда я нажимал кнопку подтверждения, поэтому я подумал сделать что-то вроде:

private void buttonConfirm_Click(object sender, EventArgs e, out List<GetBaselineSectionTasks> m_objCheckeditem)
{
    int i = 0;
    m_objCheckeditem = new List<GetBaselineSectionTasks>();
    foreach (CheckBox i_objCheck in richTextBoxPCRBaseline.Controls)
    {
        if (i_objCheck.Checked)
        {
            m_objCheckeditem.Add(i_objCheck.Tag);
            MessageBox.Show(i_objCheck.Tag.ToString());
        }
        i++;
    }
}    

И я получил эту ошибку

CS1503 Argument 1: cannot convert from 'object' to 'MyApplication.GetBaselineSectionTasks'

И это произошло из этой строки: m_objCheckeditem.Add(i_objCheck.Tag);

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

Есть идеи, как я могу получить проверенный товар и вернуть его?

в чем проблема? не очень хорошо понял ваш вопрос.

kennyzx 10.09.2018 07:57

Это просто не работает

Cookistador 10.09.2018 08:00

для нас это непросто, поскольку мы не знаем, что «не работает», потому что мы не просматриваем ваш экран. Сообщение об ошибке? Может быть, снимок экрана?

kennyzx 10.09.2018 08:03

Это мое сообщение об ошибке: CS1503 Аргумент 1: невозможно преобразовать из «объекта» в «MyApplication.GetBaselineSectionTasks». И оно пришло из этой строки: m_objCheckeditem.Add (i_objCheck.Tag);

Cookistador 10.09.2018 08:04
0
4
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку свойство Tag используется для хранения произвольных данных, его тип - System.Object.

Вы не можете добавить объект типа System.Object в общий список GetBaselineSectionTasks. Поэтому вам просто нужно привести его к соответствующему типу.

m_objCheckeditem.Add(i_objCheck.Tag as MyApplication.GetBaselineSectionTasks);

Спасибо, это сработало, но он вернул мне пустой объект. Есть ли способ использовать выходной объект с помощью метода щелчка? потому что я получаю сообщение об ошибке перегрузки

Cookistador 10.09.2018 08:14

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

kennyzx 10.09.2018 08:20

Другие вопросы по теме