2

我有一个显示彩信列表的 DataGridView。为了区分发送和接收,我在列中放置了一个右箭头和左箭头。我们的客户喜欢它,但希望右箭头为绿色以更加清晰,尤其是在国际环境中。

我选择了右箭头并在 Visual Studio 2003 中打开它(我正在使用 VS2010 编写应用程序)。我重新着色了图标,它看起来很棒,但是当我去显示包含控件时,我收到以下错误:

DataGridView 出现以下异常:

System.ArgumentException:参数无效。 在 System.Drawing.Image.FromStream(流流,布尔 useEmbeddedColorManagement,布尔 validateImageData) 在 System.Drawing.ImageConverter.convertFrom(ITypeDescriptorContext 上下文,CultureInfo 文化,对象值) 在 System.Windows.Forms.Formatter.FormatObjectInternal(对象值, 在 System.Windows.Forms.DataGridViewCell.GetFormattedValue(Object value, Int32 rowIndex, DataGridViewCellStyle& cellStyle, TypeConverter valueTypeConverter, TypeConverter formattedValueTypeConverter, DataGridViewDataErrorContexts context )

要替换此默认对话框,请处理 DataError 事件。

当我创建要填充数据的 DataTable 时,我在将具有图标的列上使用它

dt.Columns.Add(sDirection);
dt.Columns[sDirection].DataType = typeof(Byte[]);

当我将数据添加到行时,我有一个转换图标的方法。

internal static Byte[] ConvertIconToByteArray(Icon pIcon) {
        MemoryStream ms = new MemoryStream();
        pIcon.Save(ms);
        return (ms.GetBuffer());
}

我将 DataTable 添加到 DataGridView

grdMMSList.DataSource = dt.DefaultView;

(为了清楚起见,从上面的代码中删除了方法调用)

我在调试器中进行了操作,并将 DefaultView 设置为 DataSource 是引发错误的地方。我尝试将它放在 try/catch 块中,这样我就可以看到异常,但它不会触发捕获。

只是其他一些信息: - 图标存储为资源并由 Properties.Resources.RightArrow 调用 - 更改颜色后,我只是将文件保存在 VS2003 中,没有另存为。该文件仍然在各处显示为图标。- 回到 VS2010,资源文件确实有新的配色方案并在那里正确渲染。

提前感谢您提供的任何帮助。

4

1 回答 1

1

我不会以这种方式编辑图像。如果您想要一组有效的箭头,这些箭头都支持添加到 a DataGridView, 所以到目录

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\VS2010ImageLibrary\1033

在这里您会找到一个 .zip 文件。解压它。

然后你会发现带有大量 MS 图标和图像等的 varios 子目录。导航到

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\VS2010ImageLibrary\1033
    \VS2010ImageLibrary\VS2010ImageLibrary\Objects\png_format\WinVista

在这里,您会发现各种不同颜色的箭头。我的建议是使用这些,而不是您对现有文件的位图编辑。

我希望这有帮助。

于 2012-05-04T16:23:38.237 回答