3

当我单击列表框中未选择的项目时,它将被选中。客户希望如果您再次单击(因此不使用 cntrl 键)它会取消选择。

但我尝试了很多东西,但没有任何效果。那么这是可能的吗?如果可能的话,有人可以通过使用一些 C# 代码来解释我如何吗?

4

4 回答 4

3

使用内置选项没有简单的方法可以做到这一点。我的解决方案是在鼠标悬停在控件上时以编程方式发送虚拟 Ctrl 按键(因此用户无需按下或思考任何内容)。如果您不需要MultiExtended尝试使用MultiSimple( MSDN ) 的附加功能。

如果你这样做,这是丑陋的解决方案:

    [DllImport("user32.dll", SetLastError = true)]
    static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);

    public const byte KEYEVENTF_KEYUP = 0x02;
    public const int VK_CONTROL = 0x11;

    private void listBox1_MouseEnter(object sender, EventArgs e)
    {
        keybd_event(VK_CONTROL, (byte)0, 0, 0);
    }

    private void listBox1_MouseLeave(object sender, EventArgs e)
    {
        keybd_event(VK_CONTROL, (byte)0, KEYEVENTF_KEYUP, 0);
    }

从我的回答here

于 2012-07-25T12:47:55.363 回答
1

您可以在选定索引事件中添加一些内容,如果选定索引与珍贵选定的索引相同(将其存储在某处),然后将选定索引设置为 -1,则不会选择任何内容。

于 2012-07-25T12:44:49.463 回答
0

遵守SelectedValueChanged事件并添加以下内容:

string selected = null;

private void listBox1_SelectedValueChanged(object sender, EventArgs e)
{
    ListBox lb = sender as ListBox;
    if (lb == null) { return; }
    if (lb.SelectedItem != null && lb.SelectedItem.ToString() == selected)
    {
        selected = lb.SelectedItem.ToString();
        lb.SetSelected(lb.SelectedIndex, false);
    }
    else 
    {
        selected = lb.SelectedItem == null ? null : lb.SelectedItem.ToString();
    }
}
于 2012-07-25T12:48:31.693 回答
0

当您单击列表框的空白区域时,这将取消选择所有/特定列表框项目。

        private void listBox1_MouseClick(object sender, MouseEventArgs e)
        {
            int totalHeight = listBox1.ItemHeight * listBox1.Items.Count;

            if(e.Y < totalHeight && e.Y >= 0)
            {
                // Item is Selected which user clicked.

                if(listBox1.SelectedIndex == 0 && listBox1.SelectedItem != null) // Check if Selected Item is NOT NULL.
                {
                    MessageBox.Show("Selected Index : " + listBox1.SelectedItem.ToString().Trim());
                }
                else
                {
                    listBox1.SelectedIndex = -1;
                    MessageBox.Show("Selected Index : No Items Found");
                }
            }
            else
            {
                // All items are Unselected.
                listBox1.SelectedIndex = -1;
                MessageBox.Show("Selected Index : " + listBox1.SelectedItem); // Do NOT use 'listBox1.SelectedItem.ToString().Trim()' here.
            }
        }

您还可以在选择/取消选择项目时使用您想要执行的操作更改代码。

  • 如果您有任何问题,请发表评论。
于 2017-08-11T08:18:25.230 回答