【问题标题】:How to store a checkbox object in a list?如何将复选框对象存储在列表中?
【发布时间】:2018-09-10 14:09:15
【问题描述】:

我对 C# 中的 CheckBox 感到困惑

 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 参数 1:无法从 'object' 转换为 'MyApplication.GetBaselineSectionTasks'

它来自这一行:m_objCheckeditem.Add(i_objCheck.Tag);

这是我第一次使用 .Tag 属性,所以我建议它不是那样工作的。

知道如何获取我的托运物品并将其退回吗?

【问题讨论】:

  • 有什么问题?无法很好地理解您的问题。
  • 这很简单,它不起作用
  • 这对我们来说并不容易,因为我们不知道什么是“不工作”,因为我们不查看您的屏幕。任何错误信息?屏幕截图可能吗?
  • 这是我的错误信息:CS1503 Argument 1: cannot convert from 'object' to 'MyApplication.GetBaselineSectionTasks' 它来自这一行:m_objCheckeditem.Add(i_objCheck.Tag);

标签: c# winforms checkbox


【解决方案1】:

因为Tag属性是用来存储任意数据的,所以它的类型是System.Object。

您不能将 System.Object 类型的对象添加到GetBaselineSectionTasks 的通用列表中。所以你只需要把它转换成合适的类型。

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

【讨论】:

  • 谢谢,它的工作,但它返回给我一个空白对象有没有办法通过点击方法使用输出对象?因为我收到一条过载错误消息
  • 对 Click 事件处理程序使用重载并不常见。不要将列表作为参数传递,只需使其成为类成员。您可以在 Confirm 方法的第一行清除它,这样就不会重复添加项目。
猜你喜欢
  • 2020-09-30
  • 2021-08-27
  • 2012-11-06
  • 2020-05-15
  • 1970-01-01
  • 1970-01-01
  • 2020-11-28
  • 1970-01-01
  • 2016-11-03
相关资源
最近更新 更多