private void btnUp_Click(object sender, EventArgs e)
{
if (this.listView.FocusedItem == null)
{
MessageBox.Show("请选择一行数据!");
return;
}
int CurrentIndex = listView.FocusedItem.Index;
if (!CurrentIndex.Equals(0))
{
Field model = list[CurrentIndex - 1];
list[CurrentIndex - 1] = list[CurrentIndex];
list[CurrentIndex] = model;
ShowListViewData();
this.listView.Items[CurrentIndex - 1].Selected = true;
this.listView.Focus();
}
}
这段代码,为什么我在第一次上移成功后,该行已选中,可是点击“上移”后,还是提示"请选择一行数据!" ?
C# listview 控件实现上移功能, 上移之后,仍选中当前行,可继续上移
答案:3 悬赏:40 手机版
解决时间 2021-03-05 00:37
- 提问者网友:謫仙
- 2021-03-04 11:21
最佳答案
- 五星知识达人网友:话散在刀尖上
- 2021-03-04 12:47
因为设置焦点项和设置选择项是两个概念,你只要把倒数第二行改一下就OK了。
不知道你的Field和ShowListViewData,所以我的测试代码做了点改动,但解决问题的核心是倒数第二行:
private void button1_Click(object sender, EventArgs e)
{
if (this.listView.FocusedItem == null)
{
MessageBox.Show("请选择一行数据!");
return;
}
int CurrentIndex = listView.FocusedItem.Index;
if (!CurrentIndex.Equals(0))
{
//Field model = list[CurrentIndex - 1];
//list[CurrentIndex - 1] = list[CurrentIndex];
//list[CurrentIndex] = model;
//ShowListViewData();
ListViewItem i = (ListViewItem)listView.Items[CurrentIndex - 1].Clone();
listView.Items[CurrentIndex - 1] = (ListViewItem)listView.Items[CurrentIndex].Clone();
listView.Items[CurrentIndex] = i;
//this.listView.Items[CurrentIndex - 1].Selected = true;
listView.FocusedItem = this.listView.Items[CurrentIndex - 1];//改动后的代码
this.listView.Focus();
}
}
不知道你的Field和ShowListViewData,所以我的测试代码做了点改动,但解决问题的核心是倒数第二行:
private void button1_Click(object sender, EventArgs e)
{
if (this.listView.FocusedItem == null)
{
MessageBox.Show("请选择一行数据!");
return;
}
int CurrentIndex = listView.FocusedItem.Index;
if (!CurrentIndex.Equals(0))
{
//Field model = list[CurrentIndex - 1];
//list[CurrentIndex - 1] = list[CurrentIndex];
//list[CurrentIndex] = model;
//ShowListViewData();
ListViewItem i = (ListViewItem)listView.Items[CurrentIndex - 1].Clone();
listView.Items[CurrentIndex - 1] = (ListViewItem)listView.Items[CurrentIndex].Clone();
listView.Items[CurrentIndex] = i;
//this.listView.Items[CurrentIndex - 1].Selected = true;
listView.FocusedItem = this.listView.Items[CurrentIndex - 1];//改动后的代码
this.listView.Focus();
}
}
全部回答
- 1楼网友:患得患失的劫
- 2021-03-04 14:03
imagelist il = new imagelist();
il.imagesize = new size(64, 64);
for (int i = 1; i < 20; i++)
{
il.images.add(image.fromfile("c:\\bq\\cool80_" + i.tostring("00") + ".png"));
}
il.colordepth = colordepth.depth24bit;
this.listview1.largeimagelist = il;
for (int i = 1; i < 20; i++)
{
this.listview1.items.add(i.tostring(), i);
}
试试~~
- 2楼网友:青灯有味
- 2021-03-04 12:56
因为你
对this.listView.FocusedItem的判断是获得焦点的时候才不会去执行messagebox,
你在选择了listview的任何一个item之後,你执行的是button事件,然後你最後又加入一个
this.listView.Focus();
,那就是等於执行完button事件之後,你获得focus的是listview,而不是listview中的item。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯