通过列表框项目选择c#更改复选框的状态
Posted
技术标签:
【中文标题】通过列表框项目选择c#更改复选框的状态【英文标题】:Change state of checkbox by Listbox items selection c# 【发布时间】:2020-11-23 13:43:45 【问题描述】:我有一个 listbox
named (lstClass) 填充了数据库项目。我想更改位于listbox
之外的名为 (cbSelectAll) 的checkbox
的状态。我希望这些点在代码中实现,
-
加载表单时,复选框应设置为
false
。
当我从列表框中选择多个项目(未完成项目)时,复选框状态应更改为Intermediate
。
当我从列表框中选择完整的项目时,复选框状态应更改为True
。
当我单击复选框时,如果其状态为true
,则列表框中应选择所有项。
当我点击复选框时,如果它的状态是false
那么no项应该在列表框中被选中。
表格代码如下:-
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】:您可以为ListBox
处理SelectedValueChanged
事件,如下所示:
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;
【讨论】:
这对我有用。选中复选框时,它单击其状态更改为 Indeterminate 但列表框选定项中没有任何反应。仍然选择了所有项目。 您希望这些物品会发生什么? 不确定状态意味着没有选择所有项目,这就是我想要的 如果您将ThreeState
设置为false
,您将无法通过单击将cbSelectAll
置于不确定状态。我从答案中删除了最后一句话:)
在frmSelectClass_Load
中致电lstClass.SelectedItems.Clear()
。以上是关于通过列表框项目选择c#更改复选框的状态的主要内容,如果未能解决你的问题,请参考以下文章