現在、VB6.0からVB.netへの移行作業をしています。

VB.netでは、Sub_Mainに書かれた処理が終了すると、
アプリケーションも終了するという事がヘルプに書かれて
いました。変更手順もありましたので、その通りに
表示したいフォームをスタートアップオブジェクトに指定し、フォームのLoadイベントからSub_Mainを呼び出すように変更しました。

が、エラーがでます。
「System.InvalidOperationException' のハンドルされていない例外が system.windows.forms.dll で発生しました。」
「追加情報 : 1 つのスレッド上で、2 つ目のメッセージ ループを開始できません。Application.RunDialog または Form.ShowDialog を代わりに使用してください。」

.netに触るのは初めてで、入門書と格闘してますが、
エラーの意味する事すらわかりません。
何が問題なのでしょうか?

新規にフォームを作成したものは、問題なく表示されたのですが、VB6.0から移行したものは表示すらできない情況です。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

私は.NETの方しか知らなくて、何なら初心者なので、あんまり的を得た答えではないのかもしれませんが。

(そして投稿日付を見ると、もう解決しているのかもしれませんが・・・)

SUB_MAINを呼び出す記述は、
ソリューションエクスプローラーの全体のプロパティの中に「共通プロパティ」-「全般」というのがあり、そこに「スタートアップの設定」という項目があり、そこでsub_main()が選べるようになっています。
フォームの方には何も記述していません。

・・・参考にならなかったらすいません。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q古いノートPC(IBM Thinkpad R40e 2684-G2J)

古いノートPC(IBM Thinkpad R40e 2684-G2J)を復活+HDDが容量不足+不調になってしまったので、HDDを交換してさらにUBUNTU9.10をインストールしようとしましたが、CD-ROMが動作せずインストールできません。どうすればインストールできるでしょうか?

<現状>
・立ち上げると「operating system not found」と表示され止まってしまう
・HDDは20GB→160GBに交換
 (別PCにてフォーマット済)
・スタートアップの順序は変更済
・旧HDDからのデータリカバリは不要(UBUNTUのみ新規インストールしたい)

よろしくお願いします

Aベストアンサー

>CD-ROMが動作せずインストールできません。

これが原因で、
・立ち上げると「operating system not found」と表示され止まってしまう
にはなりませんけど、CD-ROMが動作する前提の話でいいですか?

まず、メーカー機はメーカー画面が最初に出ますよね?その間、裏でBIOSの処理が進行しています。で、BIOSには第一Bootデバイスを読みに行き、そのデバイスのBootセクターを読みます。第一デバイスがHDDで、ブートセクタが無いと、上記「OSがねーよ」メッセージが出ます。対処方法は、電源投入後一番最初に「起動選択(英語かも)」の選択表示(普通はF12とか)を押して第一ブートをCD-ROMにする、ないしはBIOSに入って(通常F2)Bootの順番をCD-ROMを最初選ぶ、ということになります。で、CD-ROMが作動したら?HitAnyKeyと出てる間に何かキーを押すとCD-ROMからインストール(要はブートした)が始まります。

逆に、本当にCD-ROMが作動しないなら、そのマシンではインストール不可能なので、CD-ROMを交換する、という選択肢しかなくなります。

>CD-ROMが動作せずインストールできません。

これが原因で、
・立ち上げると「operating system not found」と表示され止まってしまう
にはなりませんけど、CD-ROMが動作する前提の話でいいですか?

まず、メーカー機はメーカー画面が最初に出ますよね?その間、裏でBIOSの処理が進行しています。で、BIOSには第一Bootデバイスを読みに行き、そのデバイスのBootセクターを読みます。第一デバイスがHDDで、ブートセクタが無いと、上記「OSがねーよ」メッセージが出ます。対処方法は、電源投入後一番最初に「起動...続きを読む

QVB6.0をインストールしている環境でVB.NetをインストールしてもVB6.0は動かせるでしょうか?

初心者的な質問ですみません。
VB6.0をインストールしている環境でVB.NetをインストールしてもVB6.0は動かせるでしょうか?
それともVB6.0をアンインストールしなければVB.Netはインストールできないのでしょうか。

Aベストアンサー

.NETとVB6は同一のパソコン内で分割(お互い干渉せずに)して使うことができます。.NETの説明書にも記載がありますよ。

私としてはVB6を使っていて.NETに変更するとだいぶ違った操作性になるためHDDに余裕があるのであればVB6は残しておいた方がいいと思いますよ。

QGW-MF54G2とiPod touch

GW-MF54G2で、無線アクセスポイントモードで、マニュアルどおりにGW-MF54G2のIPアドレスも設定し、そしてルーターにGW-MF54G2をせつぞくして、iPodtouchのwi-fiをやったのですが電波を読み取るもののインターネットに接続できません。どうすればいいのでしょう??ほかになにかGW-MF54G2で設定するところがあるのでしょうか??

Aベストアンサー

> 無線PCでないとできないのですか???
そのようなことはありません。

> ルーターが0.0.0.0で、DNSのところはなにもかいてない
つながらない原因は ↑なのですが、

> マニュアルどおりにGW-MF54G2のIPアドレスも設定し、
コンバータモードに切替えておいて、
(1) IPアドレスを 192.168.1.250 に変更して、
(2) DHCPを無効にして、
(3) 適用ボタンを押して、
その後、アクセスポイントモードに切替えたのですよね。

> そしてルーターにGW-MF54G2をせつぞくして、
GW-MF54G2の Power/LAN/WLAN は、点灯または点滅してますよね。
この通りならつながります。

参考URL:http://www.planex.co.jp/support/download/wireless/gw-mf54g2/v2/html/step_ap/menu-2-4_ap.html

Q[VB.NET]3つ以上のフォームを一つずつ表示し、最後のフォームを閉じた時に最初のフォーム以外のフォームを閉じる

VB.NETを学んでいるのですが、現在3つ以上のフォームを表示していくものを作ろうとして躓いたことがあったのでこちらに書き込みました。
内容としては、ボタンを押して次のフォームを表示していくものです。

動作の流れは以下のように考えています(フォームはA、B、Cの3つとする)
1.Aを表示
2.Aでボタンを押してBを表示し、Aは隠す
3.Bでボタンを押してCを表示し、Bは隠す
4.Cでボタンを押してBとCを閉じ、隠していたAを表示

隠すのはHideを用いてできたのですが、4.でCのボタンでBとCを一緒に閉じてAを表示させる方法がわかりませんでした。

1~4のように動作させるにはどうすればいいか教えてください

Aベストアンサー

まとめて考えるのではなく、分けて考えた方がコーディングもしやすくなります。

[ FormA の処理 ]
1. ボタンを押したら FormB を開き、自身を Hide する。
2. FormB が閉じられたら、自身を Show する。

[ FormB の処理 ]
3. ボタンを押したら FormC を開き、自身を Hide する。
4. FormC が閉じられたら、自身を Close する。

[ FormC の処理 ]
5. ボタンを押したら、自身を Close する。

ポイントは、親フォーム側で子フォームのFormCloseを捕らえるところです。FormBからFormAを、とか、FormCからFormAとFormBを・・・と考えるとややこしくなります。上記のように処理すれば、FormBはFormAの動作を気にする必要はありませんし、FormCもFormBやFormAの動作を気にする必要はありません。子フォームのFormCloseはWithEvents宣言すれば捕らえられます。

以下、簡単なコードを。ボタン配置が面倒だったので、フォームのクリックで動作します。


' [ FormA の処理 ]
Public Class FormA
Inherits Form

Public Sub New()
Me.Text = "FormA"
End Sub

Private WithEvents frmFormB As FormB

' 1. ボタンを押したら FormB を開き、自身を Hide する。
Private Sub FormA_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
frmFormB = New FormB
frmFormB.Text = "FormB"
frmFormB.Show()

Me.Hide()
End Sub

' 2. FormB が閉じられたら、自身を Show する。
Private Sub frmFormB_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles frmFormB.FormClosed
frmFormB = Nothing
Me.Show()
End Sub

End Class

' [ FormB の処理 ]
Public Class FormB
Inherits Form

Private WithEvents frmFormC As FormC

' 3. ボタンを押したら FormC を開き、自身を Hide する。
Private Sub FormB_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
frmFormC = New FormC
frmFormC.Text = "FormC"
frmFormC.Show()

Me.Hide()
End Sub

' 4. FormC が閉じられたら、自身を Close する。
Private Sub frmFormC_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles frmFormC.FormClosed
frmFormC = Nothing
Me.Close()
End Sub

End Class

' [ FormC の処理 ]
Public Class FormC
Inherits Form

' 5. ボタンを押したら、自身を Close する。
Private Sub FormC_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
Me.Close()
End Sub

End Class

※VB2005で書いたコードなので.NETでそのまま動くかは不明・・・。

なお、あくまで考え方のひとつなので、他にも方法はあります。

まとめて考えるのではなく、分けて考えた方がコーディングもしやすくなります。

[ FormA の処理 ]
1. ボタンを押したら FormB を開き、自身を Hide する。
2. FormB が閉じられたら、自身を Show する。

[ FormB の処理 ]
3. ボタンを押したら FormC を開き、自身を Hide する。
4. FormC が閉じられたら、自身を Close する。

[ FormC の処理 ]
5. ボタンを押したら、自身を Close する。

ポイントは、親フォーム側で子フォームのFormCloseを捕らえるところです。FormBからFormAを、とか、FormC...続きを読む

Q着メロ3g2ファイルについて

3g2ファイルを時折頂くのですが、PCで再生できません
3g2ファイルを自由にPCで聞く事のできるプレイヤーは無いのでしょうか
あれば教えてください。
自分の着メロを作る事の出来る3g2変換ソフトで一番簡単なものは無いでしょうか

Aベストアンサー

え~とですね~、まず最初に言っておきますネ。
[3g2形式]とは着うたの形式であって、
着メロではないのですよ。メロディ形式は[mmf]です
3g2形式を再生出来るプレイヤーとしては 
代表的なものは[Quick Time Player]が有ります。
他には[Real Player]でも可です。
3g2変換ソフトとしては、[携帯動画変換君]無料、[Quick Time PRO]有料 が当てはまります。
携帯動画変換君の方が楽だとは思います。

参考URL:http://www.nurs.or.jp/~calcium/3gpp/#TRANS

QVB.NET(2008)を初めて1週間の初心者です.昔はVB6.0を少

VB.NET(2008)を初めて1週間の初心者です.昔はVB6.0を少し勉強したのですが,2008に移してから色々変わってしまってて,わからないことだらけなのでアドバイスをお願いします.

只今,PictureBox(640*480)に写し出した画像を二値化しようと取り組んでいます.
そこで,色成分を取り出す際に,以前(6.0)はPictureBoxに「.Point」をつけて取り出しをしていましたが,2008では何をあてはめて色の取り出しを行えばいいか全く分かりません….自分で色々と調べてはみたのですが,うまくいかなかったので,こちらの方でご意見を頂ければ幸いに思います.

以下は,6.0のときの色抽出のプログラム部分です.
For y = 1 To 480
For X = 1 To 640
pColor(X, y, 0) = main.Point(X - 1, y - 1) Mod 256 '赤の成分の取り出し
pColor(X, y, 1) = Int(main.Point(X - 1, y - 1) / 256) Mod 256 '緑
pColor(X, y, 2) = Int(Int(main.Point(X - 1, y - 1) / 256) / 256) '青
Next X
Next y

VB.NET(2008)を初めて1週間の初心者です.昔はVB6.0を少し勉強したのですが,2008に移してから色々変わってしまってて,わからないことだらけなのでアドバイスをお願いします.

只今,PictureBox(640*480)に写し出した画像を二値化しようと取り組んでいます.
そこで,色成分を取り出す際に,以前(6.0)はPictureBoxに「.Point」をつけて取り出しをしていましたが,2008では何をあてはめて色の取り出しを行えばいいか全く分かりません….自分で色々と調べてはみたのですが,うまくいかなかったので,こちら...続きを読む

Aベストアンサー

For x As Integer = 0 To PictureBox1.Width - 1
For y As Integer = 0 To PictureBox1.Height - 1
Dim color As Color = New Bitmap(PictureBox1.Image, PictureBox1.Size).GetPixel(x, y)

Debug.Print(color.R)
Debug.Print(color.G)
Debug.Print(color.B)

Next
Next

640*480のデータを出力しようとしたら、
私のパソコンが古いせいか、気の遠くなるほど
かかりそうでした。
30*30程度から、はじめてみた方がいいかも
でも、色情報が、ちゃんと、得られているか確かめていないので、
間違っているかも、間違っていたら、ごめん

For x As Integer = 0 To PictureBox1.Width - 1
For y As Integer = 0 To PictureBox1.Height - 1
Dim color As Color = New Bitmap(PictureBox1.Image, PictureBox1.Size).GetPixel(x, y)

Debug.Print(color.R)
Debug.Print(color.G)
Debug.Print(color.B)

Next
Next

640*480のデータを出力しようとしたら、
私のパソコンが古いせいか、気の遠くなるほど
かかりそうでした。
30*30程度から...続きを読む

QRealPlayer 8 と G2との違い

RealPlayer 8 と G2との違いを教えてgoo!
G2って今dlできるのでしょうか?

Aベストアンサー

G2→7→8へと進化したようです。
G2 は DL は判りませんが、RealPlayer 8 (Plus,Basic) なら DL 出来ますよ。
http://www.real.com/player/index.html?lang=jp&hts=yes

参考URL:http://www.jp.realnetworks.com/company/pressroom/news2000/rp8jft.html

Qカスタムコントロール作ってます(VB.NET)。VB.Net にVB.6のActiveX作成時にあったプロパティページ作成ができないようですが

タイトルどうりです。VBNETのカスタムコントロールでデザインモードにおけるフォームつまりプロパティページやビジュアルにプロパティボックスから設定できるようにしたいのですが、どうしたらできるでしょうか?VB6ではできたのですが、(Activexコントロール)。

よろしくお願いします。

Aベストアンサー

通常のプロパティと同じように、プロパティ ウィンドウに項目を表示して設定できるようにする必要があります。
具体的には、
1. カスタム コントロールのクラスに外部公開する Property プロシージャを作成して、内部で値を保存できるようにする。
2. そのプロパティの宣言部分で、プロパティ ウィンドウに表示するように指示する属性値を設定する。

こんな感じです。

参考URL:http://www.atmarkit.co.jp/fdotnet/winexp/winexp02/winexp02_01.html

Q3g2音楽の再生

最近のauの機種で3g2の音楽データをミュージックプレイヤーで再生リスト作ったりして再生できるやつありますか?昔W32SAを使っていた時はミュージックプレイヤーが内蔵されてたし、3g2ファイルの早送り巻き戻しも可能でした。しかし最近の機種はLISMO!があるためか、3g2の制限が厳しいようです。私が使っているPCではLISMO!のソフトがDL出来ないので3g2で聴くしかないので・・・何か知っている方教えてください。

Aベストアンサー

W4~で始まる機種以降は全てLISMOがミュージックプレイヤーの役割を果たしているので、W3~までの機種に入っていたようなLISMOではない3g2対応のミュージックプレイヤーは出ないと思います。自作着うたフルに対する規制の問題もあるので。どうしても3g2でないとだめなら、データフォルダで1曲ずつの再生で我慢するしかないかと・・・。
LISMO以外の選択肢を挙げるとするならば、対応機種は限られますが、MOOCS PLAYER(Panasonic製SD-Jukeboxの無料版で、SA、CA、Hに対応。Pは直接確認はしてないですがたぶん対応してるかと)やSony製のSonic Stage(Sのみ対応で本体付属が多い)をPCにインストールしてケータイに転送するというのがあります。もちろん3g2変換ではありませんが。前者はパンフレットにも載っていなかったりしますが、メーカーサイトを見るとわかります。

QVB6.0からVB.NETへの移行

VB6.0から.NETへの移行を行うこととなりましたが、C++で作成したDLL呼び出し方法がわからず悩んでいます。
C++側で作成したDLLは修正が出来ない為、.NET側のみで修正しなければならない状況です。

VB6.0側のプログラムは以下のような感じです。

Public FName() As String

Declare Function A Lib "Test.dll" (ByRef field As Variant) As Long

ReDim FName(4) As String

FName(1) = "1"
FName(2) = "22"
FName(3) = "333"
FName(4) = "4444"

Call A(fieldName)


C++側は、以下の形で受けているようです。

A(variant *field);

SAFEARRAY *psa = *(field->pparray);


VB.NET側で以下の様にしてみたのですが、まともに動いてくれません。

Public FName() As String
Declare Function A Lib "Test.dll" (ByRef field As Object) As Integer


ReDim FName(3) As String

FName(0) = "1"
FName(1) = "22"
FName(2) = "333"
FName(3) = "4444"

Call A(FName)

VB.NETに詳しい方であれば、すごく基本的なことなのではないかと思いますが、よろしくお願いいたします。

VB6.0から.NETへの移行を行うこととなりましたが、C++で作成したDLL呼び出し方法がわからず悩んでいます。
C++側で作成したDLLは修正が出来ない為、.NET側のみで修正しなければならない状況です。

VB6.0側のプログラムは以下のような感じです。

Public FName() As String

Declare Function A Lib "Test.dll" (ByRef field As Variant) As Long

ReDim FName(4) As String

FName(1) = "1"
FName(2) = "22"
FName(3) = "333"
FName(4) = "4444"

Call A(fieldName)


C++側は、以下の形で受...続きを読む

Aベストアンサー

http://www7.big.or.jp/~pinball/discus/vb/60072.html
なんか、こことすごく似ておりますが^^;

仮想でDLLを作成して、やってみました。


たしかにVB6からは問題ないですが、.netからはいろいろパターンをやってみましたが。問題なしでした。
一番のネックは
>variant *field
という部分ですね。

配列先頭のアドレスを渡してもみましたが、文字情報の先頭アドレスだけ渡り、そのアドレスが配列要素を持っているという認識が、C側で成されないようです。
DLLの宣言も様々やって見ましたが、配列情報が渡りませんでした。
Marshal.StructureToPtrメソッドなども利用してで、いろいろやってみましたが、これまた。。。。無理でした。。。



受け自体が、SAFEARRAYであれば、問題なしなのですが・・・
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpcondefaultmarshalingforarrays.asp

直接variantへのやりとりは、結構探したつもりですが、どこにもありませんでした。
無理なのかな~~~

回避策でしかありませんが、Test.DLLのAを呼ぶためのDLLをCやVB6で作成し、ワンクッション処理をかませてはいかがでしょう?

http://www7.big.or.jp/~pinball/discus/vb/60072.html
なんか、こことすごく似ておりますが^^;

仮想でDLLを作成して、やってみました。


たしかにVB6からは問題ないですが、.netからはいろいろパターンをやってみましたが。問題なしでした。
一番のネックは
>variant *field
という部分ですね。

配列先頭のアドレスを渡してもみましたが、文字情報の先頭アドレスだけ渡り、そのアドレスが配列要素を持っているという認識が、C側で成されないようです。
DLLの宣言も様々やって見ましたが、配列情報...続きを読む


人気Q&Aランキング

おすすめ情報