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

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

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

Re[2]: VB6→.NETでのエラーについて


(過去ログ 64 を表示中)

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

■36750 / inTopicNo.1)  VB6→.NETでのエラーについて
  
□投稿者/ きらつね (1回)-(2009/06/04(Thu) 19:41:37)

分類:[VB.NET/VB2005 以降] 

VB6で既に稼動しているプログラムを.NET(VB2008)へコンバートしたいのですが大量のエラーが出てうまくいきません。

1.グラフ描画の設定や命令がアップグレードされない
Picture1.DrawWidth
Picture1.PSet
Picture1.Line
Picture1.cls

以上の内容がアップグレード出来なかった旨のエラーがでます。
.NETではPictureBoxがSystem.Windows.Formsの内部にありプロパティの多くが異なっているようで上記のプロパティがありませんでした。
上記の命令と同等の処理を行いたいときはどのような方法があるのでしょうか。

2.テキストがはみ出る
アップグレードしたあとのフォームではVB6ではうまく表示できていた文字が範囲内に収まらずに長さが足りなくなり表示できないものがあります。VB6でフォントサイズ16のものが.NETでは15.75と小さくなっているのですが表示されないのはどうしてでしょうか。
また、HeightやWidthといったボックスのサイズの規格も変わっているようで単純に大きさの比較が出来ません。

3.ファイルがリネームされる
Sizeという変数がアップロードの際、Size_Renameという名前に変わっていました。
この変数を使ったものは全て変換されていますがこれによる不具合報告はないのでしょうか。また、その処理を行った理由はどうしてでしょうか。

以上の内容の手がかりをご存知の方はご教示お願いします。
.NETはおろかVB6すら知識が乏しいのでとても困っています。
引用返信 編集キー/
■36754 / inTopicNo.2)  Re[1]: VB6→.NETでのエラーについて
□投稿者/ オショウ (216回)-(2009/06/04(Thu) 20:03:45)
まずは、移行ガイドを読んでから・・・

http://msdn.microsoft.com/ja-jp/library/dd314356.aspx

それから個々の問題個所の修正方法を検討して修正・・・

どうしてもどのまま移行できない個所もありますが、今回のエラー個所は
修正できかと。

以上。
引用返信 編集キー/
■36756 / inTopicNo.3)  Re[1]: VB6→.NETでのエラーについて
□投稿者/ 魔界の仮面弁士 (1121回)-(2009/06/04(Thu) 20:55:02)
No36750 (きらつね さん) に返信
> .NETはおろかVB6すら知識が乏しいのでとても困っています。
元の VB6 コードの意味を説明できる程度の知識はお持ちでしょうか?
VB6 も VB.NET も両方知らない状態からのコンバートは、流石に厳しいかと思います。

今となっては、VB6 ユーザー向けの VB.NET 解説書は減っていますし、コンバートに関して
書かれた記事は、VB6 の知識があることを前提に書かれている事が多いからです。


一応、VB6 ユーザー向けにかかれた VB.NET 用参考書籍を紹介しておきます。
2002 当時の物ですし、VB6 の知識を前提としているので、今回の件で役に立つかどうかは分かりませんが。
http://www.amazon.co.jp/gp/product/4798102164/


> 1.グラフ描画の設定や命令がアップグレードされない
> Picture1.DrawWidth
> Picture1.Line
> Picture1.PSet
> Picture1.cls

DrawWidth プロパティは線の太さ。
→ Pen クラスの Width プロパティが近いかと思います。

Line 特殊メソッドは線の描画。
→ Graphics クラスの DrawLine メソッドが相当します。

PSet 特殊メソッドは点の描画。
→ Graphics クラスの FillEllipse メソッド。点ではなく、塗りつぶし円での代用となります。
 なお、DrawWidth = 1 の場合には、円のかわりに 1ドットの線や矩形で代用する事もできます。

Cls メソッドはキャンパスのクリア。
→ Graphics クラスの Clear メソッドを利用できます。


> 上記の命令と同等の処理を行いたいときはどのような方法があるのでしょうか。
どぼん!さんのサイトにある、描画処理の Tips 集に目を通しておかれると良いかと。
http://dobon.net/vb/dotnet/graphics/index.html


> 2.テキストがはみ出る
> アップグレードしたあとのフォームではVB6ではうまく表示できていた文字が範囲内に収まらずに長さが足りなくなり表示できないものがあります。
幾つかの理由があるかと思いますが、VB6 では「GDI」、.NET では「GDI+」を用いて
描画処理を行うため、微妙に異なる部分も出てくるかと思います。

グラフ描画等で、細かい位置制御が必要なのであれば、下記の資料が参考になるかもしれません。
http://msdn.microsoft.com/ja-jp/library/dd297679.aspx


> VB6でフォントサイズ16のものが.NETでは15.75と小さくなっているのですが表示されないのはどうしてでしょうか。
設定しようとしたサイズが 16 で、実際に割り当てられたサイズが 15.75 ということだと思います。

VB6 で、Form のフォントサイズを 16 にしたうえで、
 MsgBox Me.Font.Size
などと実行してみてください。きらつねさんの環境では、16 と表示されますか?
(少なくとも私の環境では、15.75 と表示されました)

また、下記のコードも試してみてください。

' VB6
Private Sub Form_Load()
 Dim sf As Font
 Set sf = New StdFont
 sf.Name = "MS ゴシック"
 sf.Charset = 128
 sf.Size = 16
 MsgBox sf.Size
 Set Label1.Font = sf
End Sub


> また、HeightやWidthといったボックスのサイズの規格も変わっているようで単純に大きさの比較が出来ません。
コントロール の Height/Width は、.NET ではピクセル単位系が使用されています。

VB6 の場合は、既定値では Twip 単位系が使用されています(1 論理 cm = 567 twip、1 論理インチ = 1,440twip)。
VB6 の単位系は、親コンテナ(フォーム等)の ScaleMode プロパティで単位系を変更できます。たとえば
ScaleMode = vbPixels に設定されていれば、VB6 でもピクセル単位系となります。


なお、比較のために VB.NET でも Twip との相互変換が必要なのであれば、
参照設定に Microsoft.VisualBasic.Compatibility を加えたうえで、
 Dim x As Single = Microsoft.VisualBasic.Compatibility.VB6.TwipsPerPixelX()
 Dim y As Single = Microsoft.VisualBasic.Compatibility.VB6.TwipsPerPixelY()
というコードを使うことができます。これらは、VB6 でいうところの
 x = Screen.TwipsPerPixelX
 y = Screen.TwipsPerPixelY
に相当する値で、「1 ピクセルあたりの Twip 数」を得るためのものです。


> 3.ファイルがリネームされる
> Sizeという変数がアップロードの際、Size_Renameという名前に変わっていました。
VB.NET のフォームには、Size というプロパティがあります。また、Size 型も存在します。
それらとの混同を避けるため、変数名 Size が利用されていた部分については、
すべて別の名前に変更されたのだと思います。
引用返信 編集キー/
■36772 / inTopicNo.4)  Re[2]: VB6→.NETでのエラーについて
□投稿者/ きらつね (3回)-(2009/06/05(Fri) 09:04:45)
No36754 オショウ さん
ありがとうございます。
困ったときはまずこちらのサイトに目を通してから質問するようにします。

No36756 魔界の仮面弁士
詳しい解説ありがとうございます。
とても助かりました!
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -