C#で以下のようなエラーが出るのですが対象方法をおしえてください。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
らいよん
記事: 10
登録日時: 2年前

C#で以下のようなエラーが出るのですが対象方法をおしえてください。

#1

投稿記事 by らいよん » 2年前

お世話になります。

C#を勉強中なのですがビルド後実行すると以下のようなエラーが出力されてしまいます。
エラーの内容
System.InvalidCastException: '型 'System.Drawing.Color' のオブジェクトを型 'System.IConvertible' にキャストできません。'

---処理(C#)---
MapWinGIS.Shapefile sf;

色々な処理

sf.Labels.FontColor =
Color.FromArgb(Convert.ToInt32(Color.Red.R),Convert.ToInt32(Color.Red.G),Convert.ToInt32(Color.Red.B)));

---END---

この処理はサンプルに記述されていてVB.NETでもC#でも動作すると記述があります。
VBではエラーは出力されず動作は終了します。

----処理(VB)---

Dim sf As MapWinGIS.Shapefile

色々な処理

sf.Labels.FontColor =
Convert.ToUInt32(RGB(Convert.ToInt32(Color.Red.R),Convert.ToInt32(Color.Red.G),Convert.ToInt32(Color.Red.B)))

---END---

何か解決策をご存じの方ご教示いただけないでしょうか?
以上、宜しくお願い申し上げます。

YuO
記事: 941
登録日時: 9年前
住所: 東京都世田谷区

Re: C#で以下のようなエラーが出るのですが対象方法をおしえてください。

#2

投稿記事 by YuO » 2年前

非標準のライブラリが関係するならば,そのライブラリの名前と,そのライブラリの公式サイトへのリンクくらいは張って欲しいのですが……。
オフトピック
とりあえず,The MapWindow projectと仮定
今回の場合,sf.Lbaels.FontColorプロパティはuint型であるため,System.Dawing.Colorから直接は変換できないためにエラーになっています。
ToArgbメソッドでARGBの値を取得し,Aの値を抜くために0x00FFFFFFと論理積と取って代入すればよいでしょう。

コード:

sf.Labels.FontColor = (uint)(Color.Red.ToArgb() & 0x00FF0000);
なお,Visual Basicの方のコードにおいては,Microsoft.VisualBasic.Information.RGBメソッドを使っているのでエラーにはならないですが,
そもそもMicrosoft.VisualBasic名前空間はVB独自機能や互換性のための名前空間でもあるので,あまり使わない事が望ましいかと思います。

らいよん
記事: 10
登録日時: 2年前

Re: C#で以下のようなエラーが出るのですが対象方法をおしえてください。

#3

投稿記事 by らいよん » 2年前

Yuo様、ありがとうございます。
>とりあえず,The MapWindow projectと仮定
申し訳ありません、おっしゃる通りMapwinGIsです。

ライブラリの名:winmapgis、ライブラリの公式サイト:http://www.mapwindow.org/


それとC#のソースを記述ミスしておりました。

sf.Labels.FontColor =
  Convert.ToUInt32(Color.FromArgb(Convert.ToInt32(Color.Red.R),
        Convert.ToInt32(Color.Red.G),
Convert.ToInt32(Color.Red.B)));

上記の処理で実行すると
System.InvalidCastException: '型 'System.Drawing.Color' のオブジェクトを型 'System.IConvertible' にキャストできません。'
と出力されます。

そこれご教示いただきました以下のコードで試してみたらエラーが無くなりました。
sf.Labels.FontColor = (uint)(Color.Red.ToArgb() & 0x00FF0000);

どうもありがとうございました。

返信

“C言語何でも質問掲示板” へ戻る