标签: checkedlistbox

检查项目后会触发哪个CheckedListBox事件?

我有一个CheckedListBox,我想一个项目被检查我想要一个事件,以便我可以使用具有新状态的CheckedItems.

由于在CheckedItems更新之前触发了ItemChecked,因此它不会开箱即用.

更新CheckedItems时,我可以使用哪种方法或事件来通知?

c# checkedlistbox winforms

83
推荐指数
6
解决办法
8万
查看次数

如何以编程方式检查C#中CheckedListBox中的项?

我有一个CheckedListBox,我想自动勾选其中的一个项目.

CheckedItems集合不允许您向其添加内容.

有什么建议?

c# checkedlistbox winforms

49
推荐指数
4
解决办法
9万
查看次数

正在寻找带有复选框的WPF ComboBox

我的谷歌技能让我失望.任何人都听说过像WPF这样的控件.我试图让它看起来像这样(winforms截图).

alt text http://www.angryhacker.com/toys/up.png

wpf combobox checkedlistbox

35
推荐指数
4
解决办法
6万
查看次数

如何从CheckedListBox获取已检查项的值?

我在C#中的WinForm上使用了CheckedListBox.我已经限制了这个控制,如下所示 -

chlCompanies.DataSource = dsCompanies.Tables[0];
chlCompanies.DisplayMember = "CompanyName";
chlCompanies.ValueMember = "ID";
Run Code Online (Sandbox Code Playgroud)

我可以获得已检查项目的索引,但我如何获得检查项目文本和值.而是如何通过CheckedItems枚举访问文本和值?

谢谢你分享你的时间.

.net c# checkedlistbox winforms

27
推荐指数
3
解决办法
15万
查看次数

在单击相同选择时通过MouseClick切换CheckedListBox项的已检查状态时的奇怪行为

CheckedListBox使用鼠标单击时,WinForms 控件有2个默认行为:

  1. 要检查/取消选中某个项目,您需要两次单击某个项目.第一次单击选择项目,第二次单击切换检查状态.
  2. 此外,随后单击同一项将切换该项的已检查状态.

作为一项便利功能,我需要允许用户一键切换选择.我已经实现了这一点,所以现在只需点击一下即可实现上面的默认行为#1.问题是当单击相同(即当前选定的)项目时,行为#2不再正常工作.它在项目之间跳转时工作正常,这是理想的,但同一项目最多需要4次点击.

我的解决方法是,如果用户重复选择相同的项目,则调用两次切换逻辑.关于我的问题:

  1. 这有效,但为什么呢?什么是真正的潜在问题?
  2. 有没有更好的方法来实现这一点,所以我可以让它像默认行为#2一样工作而不调用方法两次并跟踪我的最后选择?

奇怪的是,调试代码显示已检查状态已更改但在UI方面没有出现,直到它被调用两次.我认为它可能与线程相关,但它不是一个可能需要BeginInvoke使用的可重入事件.

这是我的代码:

using System.Linq;
using System.Windows.Forms;

namespace ToggleCheckedListBoxSelection
{
    public partial class Form1 : Form
    {
        // default value of -1 since first item index is always 0
        private int lastIndex = -1;

        public Form1()
        {
            InitializeComponent();
            CheckedListBox clb = new CheckedListBox();
            clb.Items.AddRange(Enumerable.Range(1, 10).Cast<object>().ToArray());
            clb.MouseClick += clb_MouseClick;
            this.Controls.Add(clb);
        }

        private void clb_MouseClick(object sender, MouseEventArgs e)
        {
            var clb = (CheckedListBox)sender;
            Toggle(clb);

            // call toggle method …
Run Code Online (Sandbox Code Playgroud)

.net c# event-handling checkedlistbox winforms

24
推荐指数
1
解决办法
8977
查看次数

如何检测项目是否添加到ListBox(或CheckedListBox)控件

这似乎是一个基本上简单的问题.我有一个带有列表框的WinForms对话框.此控件不是通过数据绑定填充,而是通过调用填充

listBox.Items.Add (obj);
Run Code Online (Sandbox Code Playgroud)

这个调用可能是从各个地方异步进行的,我想挂钩列表框并观察其数据成员的变化,以便我可以执行其他UI更改(例如启用或禁用与基于列表框交互的控件关于列表中的项目数).

不幸的是,除非我完全无能为力,否则似乎没有一个事件或虚拟方法可以被钩住来检测这一点.我可以挂钩选择更改和(对于CheckedListBox)我可以挂钩检查状态更改.但不是对基础数据集的更改.

我知道这在Win32中是可能的(有一个窗口消息).我错过了什么?


[西蒙编辑]

我被指向正确的解决方案(我已经标记为已接受的答案),它将覆盖ListBox的WndProc方法并手动处理列表框消息.这是我确定(并且有效)的解决方案.可以对其进行修改以在事件中提供更多详细信息,或将消息拆分为单独的事件,但是对于我的需求,这已足够.

using System;
using System.Windows.Forms;

public class CheckedListBoxEx : CheckedListBox
{
    public CheckedListBoxEx() { }

    private const int LB_ADDSTRING = 0x180;
    private const int LB_INSERTSTRING = 0x181;
    private const int LB_DELETESTRING = 0x182;
    private const int LB_RESETCONTENT = 0x184;

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == LB_ADDSTRING ||
            m.Msg == LB_INSERTSTRING ||
            m.Msg == LB_DELETESTRING ||
            m.Msg == LB_RESETCONTENT)
        {
            ItemsChanged(this, EventArgs.Empty);
        }
        base.WndProc(ref m);
    }

    public …
Run Code Online (Sandbox Code Playgroud)

.net c# listbox checkedlistbox winforms

21
推荐指数
1
解决办法
2万
查看次数

CheckedListBox项目的工具提示?

当用户的鼠标放在CheckedListBox中的项目上时,是否有一种直接的方法来设置其他文本出现在工具提示中?

希望能够在代码中做到的是:

uiChkLstTables.DisplayOnHoverMember = "DisplayOnHoverProperty"; //Property contains extended details
Run Code Online (Sandbox Code Playgroud)

任何人都能指出我正确的方向吗?我已经找到了一些文章,涉及检测鼠标当前所在的项目并创建一个新的工具提示实例,但这听起来有点过于设计,不是最好的方法.

提前致谢.

c# user-interface tooltip checkedlistbox winforms

15
推荐指数
2
解决办法
1万
查看次数

如何摆脱checkedlistbox选择突出显示效果?

在checkedlistbox中单击某个项目时,它会突出显示.如何防止这种突出显示效果?

我可以挂钩到SelectedIndexChanged事件并清除选择,但突出显示仍然发生,你看到一个blip.事实上,如果您按住鼠标单击,在单击复选框区域后从不释放它,选择将保持突出显示,直到您释放鼠标按钮.我基本上想完全摆脱这种突出效果.

c# checkedlistbox winforms

14
推荐指数
3
解决办法
1万
查看次数

checklistbox怎么没有数据源?如何绑定到值列表?

我正在开发Winform,我需要一个checkedlistbox.我将值存储在具有List属性的对象中:

public static class Fields
{
    public static IList<string> FieldList { get; set; }

    static Fields()
    { ...//populate FieldList }
}
Run Code Online (Sandbox Code Playgroud)

现在我希望我的CheckedListBox使用Fields.FieldList作为数据源.在线搜索后,我发现我需要设置

//in myForm_Load
mycheckedListBox.DataSource = Fields.FieldList;
Run Code Online (Sandbox Code Playgroud)

但myCheckedListBox没有DataSource属性.

我在这里错过了什么吗?

c# checkedlistbox winforms

14
推荐指数
1
解决办法
3万
查看次数

CheckedListBox只允许检查一个项目

在我的CheckedListBox应用程序中,我想只允许检查一个项目.

我已经设置了这些属性

checkOnClick = true;
SelectionMode = One;
Run Code Online (Sandbox Code Playgroud)

任何建议将不胜感激

c# checkedlistbox winforms

12
推荐指数
2
解决办法
3万
查看次数