2012-05-04 7 views
2

У меня есть DataGridView, который отображает список сообщений MMS. Чтобы различать отправленные и полученные, я помещаю стрелку вправо и стрелку влево в столбце. Наш клиент любил это, но хочет, чтобы стрелка вправо была зеленой для большей ясности, особенно в международных условиях.Настройка значка прерывает DataGridView?

Я взял стрелку вправо и открыл ее в Visual Studio 2003 (я использую VS2010 для написания приложения). Я перекрасили значок и выглядел великолепно, но когда я пошел, чтобы отобразить содержащий Control, я получаю следующее сообщение об ошибке:

следующее исключение произошло в DataGridView:

System.ArgumentException: Параметр недействительно. в System.Drawing.Image.FromStream (поток Stream, Boolean, Boolean useEmbeddedColorManagement validateImageData) в System.Drawing.ImageConverter.convertFrom (ITypeDescriptorContext контексте, CultureInfo культуры, значение объекта) в System.Windows. Forms.Formatter.FormatObjectInternal (значение объекта, тип TargetType, TypeConverter sourceConverter, TypeConverter targetConverter, Строка FormatString, IFormatProvider formatInfo, объект formattedNullValue, объект dataSourceNullValue) в System.Windows.Forms.DataGridViewCell.GetFormattedValue (значение объекта, Int32 RowIndex, DataGridViewCellStyle & cellStyle, Тип Конвертор valueTypeConverter, TypeConverter formattedValueTypeConverter, DataGridViewDataErrorContexts контекст)

Чтобы заменить диалог это по умолчанию, пожалуйста, обработайте событие 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, чтобы я мог видеть Exception, но он не вызывает catch.

Просто некоторые другие биты информации: - Икона хранится как ресурс и вызывается Properties.Resources.RightArrow - После изменения цвета, я просто сохранить файл в VS2003, ничего с Save As , Файл по-прежнему отображается как значок везде. - В VS2010 в файле ресурсов есть новая цветовая схема и правильно отображается.

Благодарим вас за любую помощь, которую вы можете предоставить.

ответ

1

Я не редактировал бы изображения таким образом.Если вы хотите действительный набор стрелок, которые все поддерживаемые для добавления в DataGridView, так в каталог

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

здесь вы найдете файл .zip. Разархивируйте его.

Тогда вы найдете Varios поддиректории с нагрузками значок MS и изображений и т.д. Переход к

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

здесь вы найдете все различные виды стрелок во всех различных цветов. Мой совет - использовать эти, а не ваши растровые изменения для существующих файлов.

Надеюсь, это поможет.

+0

Спасибо! Я не знал, что они там. Мой босс не упомянул об этом, когда он сказал мне, чтобы я искал в Интернете группы Icons & Gifs. Мне все равно было интересно узнать, почему отредактированное изображение взорвалось, когда оно было помещено в DataGridView. – krillgar

+0

В каком формате было изображение, которое вы пытались отредактировать? Для хорошей библиотеки значков/логотипов, [см. Здесь] (http://findicons.com/). – MoonKnight

+0

Извините, мне потребовалось столько времени, чтобы ответить. Я точно не помню, откуда у меня есть набор иконок. Я использую несколько из набора, и все они являются .ico-форматом. – krillgar

Смежные вопросы