|
■No79561 (魔界の仮面弁士 さん) に返信
魔界の仮面弁士さん、回答ありがとうございます。
> VB.NET に vbBlack という定数はありませんよ。 > > VB6 であれば、Long 型の定数として定義されていますが。 > (正確には VBRUN.ColorConstants 列挙型のメンバー) →vbBlackではなく、「&H0」ですね。 VB6がVbBlackで、VBNETが&H0。
> 大前提として、そもそも C# で定数として宣言できる型は、 > プリミティブ型(言語そのものが持つ組み込み型)と列挙型に限られています。 > > Color 構造体はプリミティブでは無いため、どうやっても定数にはできません。 > KnownColor 列挙型であれば、定数にできますけれどね。 > > ちなみに日付型(System.DateTime)は、C# では定数にできませんが、 > VB であれば定数にできます。(VB は言語レベルで日付型をサポートしています) > > > ということで、諦めてください。 上の、Hongliangさんへの返信でも書きましたが、「定数として使う」事をやめて、 Color.Blackを設定する方向とします。
> まず上記は、「Visual Basic PowerPacks」というライブラリの説明です。 > そして提示の URL は、2015 版のページです。 > > 今回のターゲットとしている 2008 には当てはまりません。 > > > > 補足しておくと: > > その URL をみると、ColorConstants クラスに『public const int vbBlack = 0;』が > 提供されている事が分かります。Color 型ではなく int 型であることに注意。 > > このライブラリを使えば、 vbBlack という定数が手に入りますが、 > それはあくまで int であって、Color ではありませんから、『代案1』を適用して > > using System.Drawing; > using Microsoft.VisualBasic.PowerPacks.Printing.Compatibility.VB6; > public partial class Form1 : System.Windows.Forms > { > const int i_color = ColorConstants.vbBlack; > readonly Color c_color = ColorTranslator.FromOle(i_color); > } > > のように書けるようになるだけです。これだけのためなら、 > readonly Color c_color = Color.Black; > あるいは > readonly Color c_color = Color.FromKnownColor(KnownColor.Black); > の方がスマートだと思いますよ。
→案@を採用しても結局、「ColorTranslator.FromOle」でColorに変換する必要があるということですね。 かつ、上記のライブラリは2015のもので、2008では利用できないと。
ライブラリを利用することで逆に、ソースが読みにくくなったりすることは 今後を考えると困るので、シンプルにColor.Blackを設定する方針を採ろうと思います。
非常に詳しく、回答いただきありがとございました! すごいですね!
|