C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: C#における、カラー定数を知りたい


(過去ログ 135 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■79537 / inTopicNo.1)  C#における、カラー定数を知りたい
  
□投稿者/ miumiu (1回)-(2016/04/12(Tue) 19:21:25)

分類:[C#] 


こんばんは、miumiuと申します。

開発環境:VisualStudio2008/C#.NET

C#にはVBNETにあるカラー定数(vbBlack/&H0など)に対応するものはありますか?
Color型の値である、System.Drawing.Color.Blackがあるのは確認しました。

よろしくお願いします。
引用返信 編集キー/
■79538 / inTopicNo.2)  Re[1]: C#における、カラー定数を知りたい
□投稿者/ Hongliang (426回)-(2016/04/12(Tue) 19:53:01)
言語レベルでの定数は存在していません。
ライブラリ単位で定義されている値、System.Drawing.Colorに存在しているような、を使用することになります。

ちなみに、VB.NETで使用できるvbBlackなども、.NET上のライブラリとして実装されています。
ライブラリですので、DLLを参照すればC#からでも使用できます。
https://msdn.microsoft.com/ja-jp/library/microsoft.visualbasic.powerpacks.printing.compatibility.vb6.colorconstants.vbblack.aspx
// 名前空間から指定する必要がありますが。
引用返信 編集キー/
■79556 / inTopicNo.3)  Re[2]: C#における、カラー定数を知りたい
□投稿者/ miumiu (2回)-(2016/04/14(Thu) 11:32:43)
No79538 (Hongliang さん) に返信

Hongliang さん、回答ありがとうございます。

> 言語レベルでの定数は存在していません。
> ライブラリ単位で定義されている値、System.Drawing.Colorに存在しているような、を使用することになります。
 →こんな使い方で大丈夫でしょうか(たとえば、定数で黒を定義したい場合)
  const Color b_color = Color.Black;

> ちなみに、VB.NETで使用できるvbBlackなども、.NET上のライブラリとして実装されています。
> ライブラリですので、DLLを参照すればC#からでも使用できます。
> https://msdn.microsoft.com/ja-jp/library/microsoft.visualbasic.powerpacks.printing.compatibility.vb6.colorconstants.vbblack.aspx
> // 名前空間から指定する必要がありますが。
 →これについては、どういうことかちょっとわかりませんでした。
  
  構文:public const int vbBlack
となっていますが、定数としてvbBlackを定義して、それを使えばよいということですよね。
  ただし、「ライブラリなので、DLLを参照する必要がある」ということですね。

  1:ソリューションエクスプローラでプロジェクトを右クリック
  2:参照の追加 を選択
  以降の手順がわからないのでご教示いただけますか?

よろしくおねがいします。
  
引用返信 編集キー/
■79558 / inTopicNo.4)  Re[3]: C#における、カラー定数を知りたい
□投稿者/ shu (857回)-(2016/04/14(Thu) 12:01:16)
No79556 (miumiu さん) に返信
> ■No79538 (Hongliang さん) に返信
>
> Hongliang さん、回答ありがとうございます。
>
>>言語レベルでの定数は存在していません。
>>ライブラリ単位で定義されている値、System.Drawing.Colorに存在しているような、を使用することになります。
>  →こんな使い方で大丈夫でしょうか(たとえば、定数で黒を定義したい場合)
>   const Color b_color = Color.Black;
Color.Blackをそのまま使用すればよいと思います。
b_color(多分黒のbだと思うのですが)ではなくてCellColorのように特定のものに対する色を定義するなら
意味はありますが黒色は黒色ですというような定義は意味がないです。


>>ちなみに、VB.NETで使用できるvbBlackなども、.NET上のライブラリとして実装されています。
>>ライブラリですので、DLLを参照すればC#からでも使用できます。
>>https://msdn.microsoft.com/ja-jp/library/microsoft.visualbasic.powerpacks.printing.compatibility.vb6.colorconstants.vbblack.aspx
>>// 名前空間から指定する必要がありますが。
>  →これについては、どういうことかちょっとわかりませんでした。
これはどれ?(名前空間のことなのでしょうか?)


  
>   構文:public const int vbBlack
> となっていますが、定数としてvbBlackを定義して、それを使えばよいということですよね。
>   ただし、「ライブラリなので、DLLを参照する必要がある」ということですね。
>
>   1:ソリューションエクスプローラでプロジェクトを右クリック
>   2:参照の追加 を選択
>   以降の手順がわからないのでご教示いただけますか?
>
> よろしくおねがいします。
>   
リンク先にある
ColorConstants.vbBlack フィールド
名前空間: Microsoft.VisualBasic.PowerPacks.Printing.Compatibility.VB6
アセンブリ: Microsoft.VisualBasic.PowerPacks.Vs (Microsoft.VisualBasic.PowerPacks.Vs.dll 内)

がキーとなります。
参照設定で追加するのはアセンブリの Microsoft.VisualBasic.PowerPacks.Vs
usingで名前空間 Microsoft.VisualBasic.PowerPacks.Printing.Compatibility.VB6
使用するときは ColorConstants.vbBlack
のようになります。vbBlackはintなのでColorに変換しないと使えません。

引用返信 編集キー/
■79561 / inTopicNo.5)  Re[3]: C#における、カラー定数を知りたい
□投稿者/ 魔界の仮面弁士 (694回)-(2016/04/14(Thu) 13:17:16)
No79537 (miumiu さん) に返信
> C#にはVBNETにあるカラー定数(vbBlack/&H0など)に対応するものはありますか?

VB.NET に vbBlack という定数はありませんよ。

VB6 であれば、Long 型の定数として定義されていますが。
(正確には VBRUN.ColorConstants 列挙型のメンバー)



No79556 (miumiu さん) に返信
>>言語レベルでの定数は存在していません。
>  →こんな使い方で大丈夫でしょうか(たとえば、定数で黒を定義したい場合)
>   const Color b_color = Color.Black;

大前提として、そもそも C# で定数として宣言できる型は、
プリミティブ型(言語そのものが持つ組み込み型)と列挙型に限られています。

Color 構造体はプリミティブでは無いため、どうやっても定数にはできません。
KnownColor 列挙型であれば、定数にできますけれどね。

ちなみに日付型(System.DateTime)は、C# では定数にできませんが、
VB であれば定数にできます。(VB は言語レベルで日付型をサポートしています)


ということで、諦めてください。

(代案1) VB6 の vbBlack 等相当の値を int 型の定数として保持し、都度 ColorTranslator.FromOle して使う。

(代案2) RGB 値を int 型の定数として保持し、都度 Color.FromArgb して使う。

(代案3) const のかわりに static readonly を使う。(SystemColors.ButtonHighlight などがコレ)



>>> https://msdn.microsoft.com/ja-jp/library/microsoft.visualbasic.powerpacks.printing.compatibility.vb6.colorconstants.vbblack.aspx
> →これについては、どういうことかちょっとわかりませんでした。

えぇと、どこから説明したものか…。

まず上記は、「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);
の方がスマートだと思いますよ。


そもそも 2005/2008 版の「Visual Basic PowerPacks」には、
vbBlack の定数は含まれていません。

それに .NET Framework の標準ライブラリでは無いため、追加インストールした上で、
Microsoft.VisualBasic.PowerPacks.Printing.PrintForm.dll 等を
参照設定に加える必要があります。(これは 2003 以下には非対応です)
http://msdn.microsoft.com/ja-jp/library/cc488314%28vs.90%29.aspx
https://msdn.microsoft.com/ja-jp/vstudio/aa701257.aspx
https://www.microsoft.com/en-us/download/details.aspx?id=19674


「Visual Basic PowerPacks」はその後、2010 や 2012 に標準で追加されました。
これ以降のバージョンであれば、先の vbBlack な定数が追加されています。
このバージョンからは、参照設定の DLL 名が変更されており、
Microsoft.VisualBasic.PowerPacks.Vs.dll となっています。


そして、2013 や 2015 では PowerPacks が含まれていない状態に
また戻されています。一応、ダウンロード提供されてはいますけれどね。
http://go.microsoft.com/fwlink/?LinkId=321343
引用返信 編集キー/
■79564 / inTopicNo.6)  Re[4]: C#における、カラー定数を知りたい
□投稿者/ miumiu (3回)-(2016/04/14(Thu) 15:04:14)
No79558 (shu さん) に返信

Hongliang さん、回答ありがとうございます。
魔界の仮面弁士さんの回答と合わせて読んで理解するのに時間がかかり、返信が遅くなりました。
すみません。


>> →こんな使い方で大丈夫でしょうか(たとえば、定数で黒を定義したい場合)
>>  const Color b_color = Color.Black;
> Color.Blackをそのまま使用すればよいと思います。
> b_color(多分黒のbだと思うのですが)ではなくてCellColorのように特定のものに対する色を定義するなら
> 意味はありますが黒色は黒色ですというような定義は意味がないです。

 →つまり定数で用意しなくていい、ということですね。



> リンク先にある
> ColorConstants.vbBlack フィールド
> 名前空間: Microsoft.VisualBasic.PowerPacks.Printing.Compatibility.VB6
> アセンブリ: Microsoft.VisualBasic.PowerPacks.Vs (Microsoft.VisualBasic.PowerPacks.Vs.dll 内)
>
> がキーとなります。
> 参照設定で追加するのはアセンブリの Microsoft.VisualBasic.PowerPacks.Vs
> usingで名前空間 Microsoft.VisualBasic.PowerPacks.Printing.Compatibility.VB6
> 使用するときは ColorConstants.vbBlack
> のようになります。vbBlackはintなのでColorに変換しないと使えません。
>

→参照を利用して使うとしても、Colorに変換する手間がかかりますよ、ということですね。
 素直にColor.Blackとして使ったほうがシンプルでわかりやすいですね。

ありがとうございました!
引用返信 編集キー/
■79565 / inTopicNo.7)  Re[4]: C#における、カラー定数を知りたい
□投稿者/ miumiu (4回)-(2016/04/14(Thu) 15:12:00)
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を設定する方針を採ろうと思います。

 非常に詳しく、回答いただきありがとございました!
 すごいですね!
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -