当前位置: 首页 > 知识库问答 >
问题:

按列表框项选择更改复选框的状态C#

袁卓
2023-03-14

我有一个名为(lstClass)的listbox,其中填充了数据库项。 我想更改位于列表框外部的名为(cbSelectAll)的复选框的状态。 我希望这些要点在代码中实现,

  1. 加载表单时,应将复选框设置为false
  2. 从列表框中选择多个项目(不是完整项目)时,复选框状态应更改为中间
  3. 当我选择“完成项目”列表框时,复选框状态应更改为true
  4. 单击复选框时,如果其状态为true,则应在列表框中选中所有项目。
  5. 单击复选框时,如果其状态为false,则列表框中不应选择任何项目。

表格的代码如下:-

public partial class frmSelectClass : Form
{
    private DataTable dTable;
    
    public frmSelectClass(DataTable table)
    {
        InitializeComponent();
        this.dTable = table;
    }

    private void frmSelectClass_Load(object sender, EventArgs e)
    {
        Retrieving_SheetNames();
    }

    private void Retrieving_SheetNames()
    {
        List<string> lstSheets;
        // Get sheet names from excel
        List<string> lstSheetsEx = dTable.AsEnumerable()
                   .Select(r => r.Field<string>("TABLE_NAME").Trim(new char[] { '\'', '$' })).ToList();
        using (var conn = new OleDbConnection(DatabaseObjects.ConnectionString))
        {
            using (OleDbCommand command = new OleDbCommand("select * from Classes", conn))
            {
                conn.Open();
                DataTable dtClassDb = new DataTable();
                dtClassDb.Load(command.ExecuteReader());
                // Get sheet names from Access DB
                List<string> lstSheetsdb = dtClassDb.AsEnumerable().Select(c => c.Field<string>("Class")).ToList();
                // Order sheet names according to DB
                lstSheets = lstSheetsdb.Intersect(lstSheetsEx).Union(lstSheetsEx).ToList();
            }
        }
        lstClass.DataSource = lstSheets;
    }
   
    private void cbSelectAll_CheckedChanged(object sender, EventArgs e)
    {
        if (cbSelectAll.Checked)
        {
            for (int i = 0; i < lstClass.Items.Count; i++)
            {
                lstClass.SetSelected(i, true);
            }
            return;
        }
        for (int i = 0; i < lstClass.Items.Count; i++)
        {
            lstClass.SetSelected(i, false);
        }
    }
}

共有1个答案

邹嘉荣
2023-03-14

您可以处理ListBoxSelectedValueChanged事件,如下所示:

private void lstClass_SelectedValueChanged(object sender, EventArgs e)
{
    cbSelectAll.CheckedChanged -= cbSelectAll_CheckedChanged;
    if (lstClass.SelectedItems.Count == 0)
        cbSelectAll.CheckState = CheckState.Unchecked;
    else if (lstClass.SelectedItems.Count == lstClass.Items.Count)
        cbSelectAll.CheckState = CheckState.Checked;
    else
        cbSelectAll.CheckState = CheckState.Indeterminate;
    cbSelectAll.CheckedChanged += cbSelectAll_CheckedChanged;

}
 类似资料:
  • 对不起,我仍然是小新在这方面,只是万一有代码有人想看到我否定这里是整个代码要点嵌入 我花了2个星期建立这个应用程序,并已卡在这个过滤在过去的2天。我需要有这个应用程序MVP明天下午演示在一个就业活动为最近的毕业生,这是仅剩的2件事之一。 我没有足够的代表赏金,但任何帮助或建议都很感激

  • 问题内容: 我希望一个事件在选中/未选中复选框时触发客户端: 基本上,我希望页面上的每个复选框都发生这种情况。这种触发点击并检查状态的方法可以吗? 我认为必须有一种更清洁的jQuery方式。有人知道解决方案吗? 问题答案: 绑定到事件而不是。但是,您可能仍然需要检查是否已选中该复选框: 绑定到 事件 而不是事件的主要好处是,并非所有对复选框的单击都会导致其更改状态。如果只想捕获导致复选框更改状态的

  • 问题内容: 我有一个框,当单击框并显示所有选项时,我正在尝试更改选项的背景色。 HTML: CSS: 问题答案: 你需要把对标签,而不是标签… 如果要为每个标签设置样式,请使用css 选择器:

  • 我有一个选择框,当选择框被单击并显示所有选项时,我正在尝试更改选项的背景颜色。

  • 当html页面上没有任何变量可以切换时,是否有人知道如何使用selenium处理或读出复选框的状态(true/false)。我已经尝试了常用函数。isselected()和。isenabled(),但这些函数只读取不可用的值。 有人知道有没有办法得到这个身份吗?此外,xml的屏幕截图以及它是哪个元素。 如果有人有主意就太好了。我在用Java编程。

  • 我的ListView自定义适配器(及其新实现的viewHolder)有一些问题。我有一个列表视图,每个项目都有一个复选框(这里没有新内容)。问题是,如果我的列表中有超过9个项目,当我选中第一个复选框时,第十个将自动选中(第二个与第十一个相同),就像两个项目都有一个监听器一样(我认为在某种程度上是这样)。 我在这里读到了listView、视图回收和ViewHolder解决它的方法的位置问题:如何使我

  • 问题内容: 我的ListView自定义适配器(及其新实现的viewHolder)存在一些问题。我有一个ListView,每个项目都有一个复选框(这里没有新内容)。问题是,如果列表中有9个以上的项目,则当我选中第一个复选框时,将自动检查第10个复选框(第二个和第11个复选框相同),就像两个项目都有一个监听器一样(我相信情况确实如此)。 我在这里阅读了有关listView的位置问题,视图回收以及Vie

  • ListPreferenceHey我正在使用PreferenceActivity,并使用ListPreferency添加了单选按钮。问题是listPreference使用了自己的对话框,其中有蓝色单选按钮(Lollipop上为绿色),我需要将其更改为橙色。我设法得到对话框,并使用以下命令更改标题和分隔线颜色: 那么如果标题id是“android:id/alertTitle”,divder id是“