gpt4 book ai didi

c# - ListView 项选择和异常处理

转载 作者:太空宇宙 更新时间:2023-11-03 22:58:29 28 4
gpt4 key购买 nike

我有一个项目 ListView ,用户一次只能在其中选择一个项目。我有以下代码,只有当我把它放在 try/catch block 中时才能正常工作。问题是,有些项目名称太长,导致其他项目出现大量空白。单击空白将导致 ArgumentOutOfRangeException,即使它与项目位于同一行。我通过将它推到 try/catch block 中解决了这个问题,但我觉得这是一种肮脏的做法,即使它有效。下面是代码。

private void listView1_DoubleClick(object sender, EventArgs e)
{
try
{
string[] arr1 = File.ReadAllLines(listView1.SelectedItems[0].Tag.ToString());
string[] arr2 = arr1[0].Split(';');
}
catch
{
//no catch
}
}

我想完全避免这种情况,但我不知道如何更改代码以使其在没有 try/catch 的情况下工作。我尝试了 if(!String.IsNullOrEmpty),但它仍然不起作用。这里的解决方案是什么?

最佳答案

由于您的 ListViewView=List 中,因此选择需要点击项目文本。

我不得不承认,这很不方便,打开 FullRowSelect 也无济于事,因为它仅适用于 View=Details

这是一个快速修复:

private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)
{
var hit = listView1.HitTest(e.Location);
if (hit.Item != null)
{
string file = hit.Item.Text;
string[] arr1 = null;
if (File.Exists(file)) arr1 = File.ReadLines(file).ToArray();
...
}
}

您可能想转到问题的底部并向 MouseUp 事件添加代码以选择该行..:

private void listView1_MouseUp(object sender, MouseEventArgs e)
{
var hit = listView1.HitTest(e.Location);
if (hit.Item != null) hit.Item.Selected = true;
}

请注意,HitTest 只会捕获 Items,无论是否为空,右侧或底部的背景空间都不是真正空的..!

关于c# - ListView 项选择和异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44263850/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com