DOBON.NET DOBON.NETプログラミング掲示板過去ログ

C#でVB6.0のMSFlexGredを使う

環境/言語:[Windows XP C#.NET Framework1.0]
分類:[.NET]

こんばんは、質問させていただきます。

私はC#の勉強を始めたばかりの初心者です。
C#でグリッドを使ってデータベースの内容を表示しようと思っています。以前VB6.0でグリッドを使ったことがあるので、このコントロールを追加してC#で利用したいと考えています。C#の「アイテムの追加と削除」でMicrosoft FlexGrid.version6.0を追加してMSFlexGridを使えるようにしました。

VB6.0と同じように使えると思っていましたが、実際は同じには使えないところが多いみたいで悩んでいます。
例えばVB6.0でグリットのフォントサイズを変えるときには

MSFlexGrid.Font.Size=14という命令で平気ですがC#になると
axMSFlexGrid1.FontSize =14という命令になります。

VB6.0で見出し文の文字の位置をセンターにそろえるときは
MSFlexGrid.CellAlignment=flexAlignCenterCenterになると思うんですが、C#だと
axMSFlexGrid1.set_FixedAlignment(i,(short)AlignmentSettings.flexAlignCenterCenter)になります。

その都度ネットなどを検索かけて調べていますが、見つけるの大変です。何かよいアドバイスなどありましたら教えてください。
> C#の「アイテムの追加と削除」でMicrosoft FlexGrid.version6.0を追加してMSFlexGridを使えるようにしました。

まず、これはライセンス違反になります。
追加したものはVB6をインストールすることにより使えるようになるものであり
VB6で作成したアプリとともに配布することのみが許されます。
他のコントロールも同様です。
参照ダイアログに出てくるものは単にインストールされている一覧です。
使おうとしているものがライセンスに引っかからないか確認が必要です。

> MSFlexGrid.CellAlignment=flexAlignCenterCenterになると思うんですが、C#だと
> axMSFlexGrid1.set_FixedAlignment(i,(short)AlignmentSettings.flexAlignCenterCenter)になります。
>
> その都度ネットなどを検索かけて調べていますが、見つけるの大変です。

表示メニューのオブジェクトブラウザを活用してください。
まどかさん、こんばんは
返答ありがとうございます。

> 表示メニューのオブジェクトブラウザを活用してください。

早速拝見しました。メソッドやメンバ、プロパティなどがたくさんありました。
ありがとうございます。欲を言えばメソッドやメンバで意味が書いていないものが多々ありましたので、具体的な意味が書いてあれば良いなと思いました。これは自分で調べるものですよね・・・

> まず、これはライセンス違反になります。
> 追加したものはVB6をインストールすることにより使えるようになるものであり
> VB6で作成したアプリとともに配布することのみが許されます。
> 他のコントロールも同様です。
> 参照ダイアログに出てくるものは単にインストールされている一覧です。
> 使おうとしているものがライセンスに引っかからないか確認が必要です。

ご指摘ありがとうございます。VB6がインストールしてあるから使用して良いものだと思っていました。確認してみます。もしライセンスに引っかかるようならば、
C#のDataGridを使ってみます。
> ご指摘ありがとうございます。VB6がインストールしてあるから使用して良いものだと思っていました。確認してみます。

是非、Microsoftに問い合わせて、フィードバックしてもらえると有難いです。


ただ、VB6をお持ちなので、おそらくは問題ないよう思えます。
ライセンスというと、大まかに分けて
 1. ランタイムライセンス(実行時ライセンス)
 2. デザインタイムライセンス(開発時ライセンス)
 3. ディストリビュートライセンス(再頒布ライセンス)
の3種があるかと思いますが、1. は問題無いでしょうし、2についても
VB6のライセンスを引き継がれるでしょうからね。私見ですが。

ちなみに、VB6を持っていない場合でも、DVD 内の \Extras\VB6 Controls\VB6Controls.reg というファイルをレジストリに登録すれば、VB6用コントロールを使う事ができます。
ただし、2002 に付属のVB6Controls.reg は、Msflxgrd.ocx のライセンス情報に誤りがあるので、Microsoft に連絡して修正版を入手する必要があります。(2003では修正済み)


残る問題は、再頒布のライセンスですが、これはまどかさんも書かれていますように、MSFlexGrid/MSHFlexGrid をVB6で作成したアプリとともに頒布する事で解決できるかと思います。


> VB6で作成したアプリとともに配布することのみが許されます。
> 他のコントロールも同様です。
C#.NET 2002の単体パッケージのライセンスに関しては知りませんが、
VS.NET 2002の場合は、マスクエディットとMSChartは再頒布可能だったはず…。
> ちなみに、VB6を持っていない場合でも、DVD 内の \Extras\VB6 Controls\VB6Controls.reg というファイルをレジストリに登録すれば、VB6用コントロールを使う事ができます。

おぉ!そうでしたか。

> 再頒布のライセンスですが、MSFlexGrid/MSHFlexGrid をVB6で作成したアプリとともに頒布する事で解決できるかと思います。

そうですね、開発中は大丈夫のような気がしてきました。
こんばんは、

>是非、Microsoftに問い合わせて、フィードバックしてもらえると有難いです。

Microsoftに問い合わせたところ、VB6の入手方法でパッケージ版とボリューム版のどちらなのかを確認して、その使用許諾を見て判断するという返答がありました。私の場合、学校で使用していて先生に聞いたところ、問題ないという返事をもらいましたので、安心しています。
> MSFlexGrid.Font.Size=14という命令で平気ですがC#になると
> axMSFlexGrid1.FontSize =14という命令になります。

MSFlexGrid.FontSize の構文は、VB6でも使用できますね。

.Font.Size への書き込みが .NET で使用できなくなったのは、
Fontプロパティの戻り値が、OLE Fontオブジェクト(stdole.StdFont)ではなく、
System.Drawing.Font クラスに変化しているせいですね。

このあたりのクラスの変化については、Font だけではなく、
OLE Pictureオブジェクト(stdole.StdPicture)でも同様で、
たとえば CellPicture への画像操作に関して、若干の変化があります。


> VB6.0で見出し文の文字の位置をセンターにそろえるときは
> MSFlexGrid.CellAlignment=flexAlignCenterCenterになると思うんですが、
ではなく、
 MSFlexGrid1.FixedAlignment(i) = flexAlignCenterCenter
ですよね。
通常の CellAlignment プロパティの方であれば、引数を持たないので、
 axMSFlexGrid1.CellAlignment=(short)AlignmentSettings.flexAlignCenterCenter;
という、そのままのコードにする事ができます。


> axMSFlexGrid1.set_FixedAlignment(i,(short)AlignmentSettings.flexAlignCenterCenter)
引数を持つプロパティがサポートされていない関係で、
get_/set_メソッドに置き換わってしまいますね。

このあたりの事情は VB.NET でも一緒なので、
http://www.bcap.co.jp/hanafusa/dotnet/MSFGrid1.htm
等が参考になるかも知れません。(既にご存知かも知れませんが)

VB6コントロールの使い方については、C#向けサイトよりも、VB.NET向けの
サイトの方が情報を見つけやすいでしょう。
こんばんは、
魔界の仮面弁士さん返答ありがとうございます。

> .Font.Size への書き込みが .NET で使用できなくなったのは、
> Fontプロパティの戻り値が、OLE Fontオブジェクト(stdole.StdFont)ではなく、
> System.Drawing.Font クラスに変化しているせいですね。

> このあたりのクラスの変化については、Font だけではなく、
> OLE Pictureオブジェクト(stdole.StdPicture)でも同様で、
> たとえば CellPicture への画像操作に関して、若干の変化があります。

> 通常の CellAlignment プロパティの方であれば、引数を持たないので、
>  axMSFlexGrid1.CellAlignment=(short)>AlignmentSettings.flexAlignCenterCenter;

具体的な説明ありがとうございます。これでなぜVB6のコントロールがC#では同じ命令で書けないのがわかりました。

> このあたりの事情は VB.NET でも一緒なので、
> http://www.bcap.co.jp/hanafusa/dotnet/MSFGrid1.htm
> 等が参考になるかも知れません。(既にご存知かも知れませんが)
このサイトは大変参考になります。今まで知らなかったです。ありがとうございます。

> VB6コントロールの使い方については、C#向けサイトよりも、VB.NET向けの
> サイトの方が情報を見つけやすいでしょう。
アドバイスありがとうございます。実際検索してみたら、参考になるサイトがヒットしました。

>  MSFlexGrid1.FixedAlignment(i) = flexAlignCenterCenter
> ですよね。
確認したら、これもできました。私は1列ずつ

Col = 0:MSFlexGrid1.CellAlignment = flexAlignCenterCenter
Col = 1:MSFlexGrid1.CellAlignment = flexAlignCenterCenter
このように列の数だけやっていました。

MSFlexGrid1.FixedAlignment(i) = flexAlignCenterCenterのほうが効率がよいことがわかりました。こちらを使わせてもらいます。
いろいろありがとうございました。
解決済み!
> 確認したら、これもできました。私は1列ずつ
> Col = 0:MSFlexGrid1.CellAlignment = flexAlignCenterCenter
> Col = 1:MSFlexGrid1.CellAlignment = flexAlignCenterCenter
> このように列の数だけやっていました。

そういう時には、
 .Row = 0 : .Col = 0
 .RowSel = 2 : .ColSel = 2
 .FillStyle = flexFillRepeat
 .CellAlignment = flexAlignCenterCenter
のように、「FillStyle プロパティ」を flexFillRepeat にする事で、
複数のセルに対して、一括して指定する事ができますね。

# C# のスレッドで、VB6 の話題をするのも何ですが、
# FillStyle は AxMSFlexGrid でも使える機能なので、一応補足。
解決済み!
こんばんは、

>  .Row = 0 : .Col = 0
>  .RowSel = 2 : .ColSel = 2
>  .FillStyle = flexFillRepeat
>  .CellAlignment = flexAlignCenterCenter
> のように、「FillStyle プロパティ」を flexFillRepeat にする事で、
> 複数のセルに対して、一括して指定する事ができますね。
これも試したところできました。いろいろな技を教えてくれてありがとうございます。

> # C# のスレッドで、VB6 の話題をするのも何ですが、
> # FillStyle は AxMSFlexGrid でも使える機能なので、一応補足。

いろいろと本当にありがとうございました。C#でAXMSFlexGridを使いこなせるよう勉強したいと思います。
こんばんは、

すいません、この記事は解決しました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板