C# ListBox用双击事件调用删除方法后总是选中“C”字头的项目,用按钮调用删除方法则正常,咋回事?
privatevoidlistBox1_DoubleClick(objectsender,EventArgse){//双击调用删除方法DelItem();}private...
private void listBox1_DoubleClick(object sender, EventArgs e) {
//双击调用删除方法
DelItem();
}
private void Form1_Load(object sender, EventArgs e) {
listBox1.Items.Add("A123");
listBox1.Items.Add("B123");
listBox1.Items.Add("C123");
listBox1.Items.Add("A456");
listBox1.Items.Add("B456");
listBox1.Items.Add("C456");
listBox1.Items.Add("A789");
listBox1.Items.Add("B789");
listBox1.Items.Add("C789");
}
void DelItem() {
//未选择项目
if (this.listBox1.SelectedIndex == -1)
{
return;
}
//选中项目索引 int selIndex = this.listBox1.SelectedIndex;
//删除选中项目 this.listBox1.Items.RemoveAt(selIndex);
//项目数 int itemCount = this.listBox1.Items.Count;
//选中删除后的前一项 if (itemCount > selIndex)
{
this.listBox1.SelectedIndex = selIndex;
}
else
{
this.listBox1.SelectedIndex = selIndex - 1;
}
}
private void button1_Click(object sender, EventArgs e) {
//按钮调用删除方法
DelItem();
} 用双击调用删除方法后,选中项目自动跳到“C”开头的项目:
点击button1按钮调用删除方法后,选中项目正常: 展开
//双击调用删除方法
DelItem();
}
private void Form1_Load(object sender, EventArgs e) {
listBox1.Items.Add("A123");
listBox1.Items.Add("B123");
listBox1.Items.Add("C123");
listBox1.Items.Add("A456");
listBox1.Items.Add("B456");
listBox1.Items.Add("C456");
listBox1.Items.Add("A789");
listBox1.Items.Add("B789");
listBox1.Items.Add("C789");
}
void DelItem() {
//未选择项目
if (this.listBox1.SelectedIndex == -1)
{
return;
}
//选中项目索引 int selIndex = this.listBox1.SelectedIndex;
//删除选中项目 this.listBox1.Items.RemoveAt(selIndex);
//项目数 int itemCount = this.listBox1.Items.Count;
//选中删除后的前一项 if (itemCount > selIndex)
{
this.listBox1.SelectedIndex = selIndex;
}
else
{
this.listBox1.SelectedIndex = selIndex - 1;
}
}
private void button1_Click(object sender, EventArgs e) {
//按钮调用删除方法
DelItem();
} 用双击调用删除方法后,选中项目自动跳到“C”开头的项目:
点击button1按钮调用删除方法后,选中项目正常: 展开
2个回答
展开全部
没发现代码有什么问题,实际运行了一下也是正常的,但是
//选中项目索引 int selIndex = this.listBox1.SelectedIndex;
//删除选中项目 this.listBox1.Items.RemoveAt(selIndex);
//项目数 int itemCount = this.listBox1.Items.Count;
这三行是被你注释了还是怎样,如果这三行去掉注释的话,代码就没什么问题。
更多追问追答
追问
抱歉,复制代码上去时它自动给我搞在一行了,三行代码是有效的,中文才是注释!代码是正常,也能运行,就是删除后想选中的项却一直是以“C”字母开头的项,这才令我头疼!
追答
在我这里一切正常,我是win7 64bit+VS 2010,用你的代码,没有发现你说的情况,定位也都是正常的,listbox为默认的控件未更改任何属性
建议你在 this.listBox1.Items.RemoveAt(selIndex);
this.listBox1.SelectedIndex = selIndex - 1;
这两行上都下断点,看看selindex倒底是什么,如果值是正常的,那就要怀疑是不是你的键盘或者鼠标或者其它问题了。
展开全部
void DelItem()
{
int selIndex = this.listBox1.SelectedIndex;
//未选择项目
if (selIndex == -1) return;
this.listBox1.Items.RemoveAt(selIndex);
//项目数
if (this.listBox1.Items.Count > 0)
{
this.listBox1.SelectedIndex = selIndex == 0 ? 0 : selIndex - 1;
}
}
逻辑调整了一下
更多追问追答
追问
按你的方法搞了进去,效果没变啊,用双击调用删除方法后,还是选中项目自动跳到“C”开头的项目!
追答
我这里是OK的。
你双击之后,没有滚动鼠标的滚轮之类的动作吧?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询