【发布时间】:2019-02-13 09:39:56
【问题描述】:
我正在构建一个ListView 来向用户显示图像。
在表单构造函数中,我加载所有图像,然后显示表单。然后在ShowDialog()函数中抛出一个ArgumentException:
消息:参数无效
ParamName:null
InnerException:null
来源:System.Drawing
StackTrace:
System.Drawing.Image.get_Width() System.Drawing.Image.get_Size() System.Windows.Forms.ImageList.CreateBitmap(Original original, Boolean& ownsBitmap) System.Windows.Forms.ImageList.CreateHandle() System.Windows.Forms.ImageList.get_Handle() System.Windows.Forms.ListView.RealizeProperties() System.Windows.Forms.ListView.OnHandleCreated(EventArgs e) System.Windows.Forms.Control.WmCreate(消息& m) System.Windows.Forms.Control.WndProc(消息& m) System.Windows.Forms.ListView.WndProc(消息& m) System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
我使用solution from here 以便能够在用户需要时删除图像。如果我不使用该解决方案并且不使用 using 块,它可以正常工作。但是我不能再删除图像了。
这是我的代码。请注意,该方法始终执行到最后(我使用断点进行了检查)。只有当我调用 ShowDialog() 时才会抛出异常:
private void LoadImages()
{
lv_Images.LargeImageList = new ImageList();
lv_Images.LargeImageList.ImageSize = new Size(64, 64);
DirectoryInfo di = new DirectoryInfo(initialDirectory);
foreach (FileInfo file in di.EnumerateFiles())
{
if (isImage(file)) //Simply checks the file extension
{
using (Image img = Image.FromFile(file.FullName))
{
lv_Images.LargeImageList.Images.Add(file.Name, img);
}
int index = lv_Images.LargeImageList.Images.IndexOfKey(file.Name);
lv_Images.Items.Add(file.Name, file.Name, index);
}
}
}
我认为奇怪的是,当我从表单的Shown 事件调用LoadImages() 方法时,它工作正常。
所以我并没有真正陷入困境,因为我有一个解决方法,但我很好奇为什么会抛出这个异常。
【问题讨论】:
-
您是否尝试详细检查异常。特别是什么参数无效?
-
@Ucho 是的,我检查过(更新了我的问题),ParamName 为空...
-
您是否尝试了解这是否与特定图像有关? IE。过滤使用的文件?
-
lv_Images.LargeImageList.Images.Add(file.Name, (Image)img.Clone()); -
@Jimi 有效。你能解释一下为什么吗?