MMS メッセージのリストを表示する 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(オブジェクト値、Int32 rowIndex、DataGridViewCellStyle& cellStyle、TypeConverter valueTypeConverter、TypeConverterformattedValueTypeConverter、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 ブロックに配置しようとしましたが、catch はトリガーされません。
他のいくつかの情報: - アイコンはリソースとして保存され、Properties.Resources.RightArrow によって呼び出されます - 色を変更した後、ファイルを VS2003 に保存します。ファイルはまだどこでもアイコンとして表示されます。- VS2010 では、リソース ファイルに新しい配色があり、適切にレンダリングされます。
あなたが提供できる助けを前もって感謝します。