De-select/ listBox WinForm C# 的高亮逻辑
De-select/ highlight logic for listBox WinForm C#
当再次单击同一项目或简单地单击列表框(如果可能的话)时,我正在努力形成取消select项目的逻辑。
目前我已经设置了一个变量 prevSelectedIndex = -2
然后在列表框的 selectedIndexChanged()
方法中 -> 我检查 list.SelectedIndex == prevSelectedIndex
如果那是真的,那么我调用列表的 ClearSelected()
方法。
如果为 false,我设置 prevSelectedIndex = SelectedIndex
并将 selectedIndex
传递给一个函数,这样我就可以使用项目 selected 中的数据预先设置一些输入字段。但是,它无法删除它,因为我认为列表框的 selectedIndexChanged()
方法显然只在它确实发生变化而不是保持不变时调用(用于再次单击相同项目时尝试取消 select ) .
此外,当我单击 within/outside 列表框而不是某个项目时,我尝试检查输出是否可能会更改为索引以外的其他内容,例如 -1,但这并没有发生。
感谢任何帮助!
谢谢
如果您需要通过鼠标输入切换项目的选择状态,ListBox.SelectedIndexChanged
不是要处理的正确事件。您需要处理鼠标事件。
例如,您可以处理 MouseClick
事件来调用 IndexFromPoint
方法,如果您点击某个项目 returns 或 -1
如果你点击客户区。然后,您可以将该索引与 class 字段进行比较,该字段通过鼠标或键盘箭头存储最后选择的索引,如果数字相等则取消选择该项目。
将其与其他要求放在一起
public partial class YourForm : Form
{
private int toggleIndex = -1;
public YourForm()
{
InitializeComponent();
}
private void yourListBox_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
var s = sender as ListBox;
var i = s.IndexFromPoint(e.Location);
if (i >= 0)
{
if (i == toggleIndex)
{
s.SetSelected(i, false);
// or
// s.ClearSelected();
i = -1;
}
}
else
{
s.ClearSelected();
}
toggleIndex = i;
}
}
private void yourListBox_SelectedIndexChanged(object sender, EventArgs e)
{
toggleIndex = yourListBox.SelectedIndex;
}
private void yourListBox_Leave(object sender, EventArgs e)
{
toggleIndex = -1;
yourListBox.ClearSelected();
}
}
当再次单击同一项目或简单地单击列表框(如果可能的话)时,我正在努力形成取消select项目的逻辑。
目前我已经设置了一个变量 prevSelectedIndex = -2
然后在列表框的 selectedIndexChanged()
方法中 -> 我检查 list.SelectedIndex == prevSelectedIndex
如果那是真的,那么我调用列表的 ClearSelected()
方法。
如果为 false,我设置 prevSelectedIndex = SelectedIndex
并将 selectedIndex
传递给一个函数,这样我就可以使用项目 selected 中的数据预先设置一些输入字段。但是,它无法删除它,因为我认为列表框的 selectedIndexChanged()
方法显然只在它确实发生变化而不是保持不变时调用(用于再次单击相同项目时尝试取消 select ) .
此外,当我单击 within/outside 列表框而不是某个项目时,我尝试检查输出是否可能会更改为索引以外的其他内容,例如 -1,但这并没有发生。
感谢任何帮助!
谢谢
如果您需要通过鼠标输入切换项目的选择状态,ListBox.SelectedIndexChanged
不是要处理的正确事件。您需要处理鼠标事件。
例如,您可以处理 MouseClick
事件来调用 IndexFromPoint
方法,如果您点击某个项目 returns 或 -1
如果你点击客户区。然后,您可以将该索引与 class 字段进行比较,该字段通过鼠标或键盘箭头存储最后选择的索引,如果数字相等则取消选择该项目。
将其与其他要求放在一起
public partial class YourForm : Form
{
private int toggleIndex = -1;
public YourForm()
{
InitializeComponent();
}
private void yourListBox_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
var s = sender as ListBox;
var i = s.IndexFromPoint(e.Location);
if (i >= 0)
{
if (i == toggleIndex)
{
s.SetSelected(i, false);
// or
// s.ClearSelected();
i = -1;
}
}
else
{
s.ClearSelected();
}
toggleIndex = i;
}
}
private void yourListBox_SelectedIndexChanged(object sender, EventArgs e)
{
toggleIndex = yourListBox.SelectedIndex;
}
private void yourListBox_Leave(object sender, EventArgs e)
{
toggleIndex = -1;
yourListBox.ClearSelected();
}
}