VB2010のコンパイルエラーの解決方法

このQ&Aのポイント
  • VB6からVB2010への移行を行う際に、コンパイルエラーが発生しました。
  • エラーメッセージは、型 'System.Windows.Forms.Cursor' の値を 'Integer' に変換できませんという内容です。
  • 原因は、VB6のコードをVB2010に変換した際に、マウスポインタの扱い方が変わったことです。解決方法として、コンバート後のソースコードで、System.Windows.Forms.Cursor.Currentを使用するように修正するとエラーが解消されます。
回答を見る
  • ベストアンサー

VB2010 コンパイルエラー

VB6からVB2010への移行を行うにあたり、 VB6→VB2008→VB2010 のコンバートを行いました。 が、以下のソースがコンバートされてコンパイルエラーになってしまいます。 エラー内容: 型 'System.Windows.Forms.Cursor' の値を 'Integer' に変換できません。 ---(1)元のソース------------------ Dim lSv_Mouse As Long 'マウスポインタ状態の保存 lSv_Mouse = Screen.MousePointer (中略) 'マウスポインタ状態の復元 Screen.MousePointer = lSv_Mouse ---------------------------------- ---(2)コンバート後のソース--------- Dim lSv_Mouse As Integer 'マウスポインタ状態の保存 lSv_Mouse = System.Windows.Forms.Cursor.Current (中略) 'マウスポインタ状態の復元 System.Windows.Forms.Cursor.Current = lSv_Mouse ---------------------------------- 何か良い方法は無いでしょうか?

  • torum
  • お礼率61% (19/31)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

コンバータはあくまでコンバータなので,変更後のソースが正しいことは自分で調査する必要があります。 今回の場合では,コンパイルエラーにある通りです。 カーソルはSystem.Windows.Forms.Cursor型を使って保持しないといけません。 なので,lSv_Mouseの型をSystem.Windows.Forms.Cursor型に変更して下さい。 もちろん,それに伴って別の修正が必要になるかもしれませんが。

torum
質問者

お礼

型変換で、int、long、String等のいずれかに変換しなければと思い込んでいました。 変数定義を Dim lSv_Mouse As System.Windows.Forms.Cursor として解決しました。 ありがとうございました。

関連するQ&A

  • 【VB2008】 マウス操作の一時的無効化

     いつも勉強させていただいています。  質問させていただきます。よろしくお願いします。  あるソフトのデータ保存を数分毎に行う必要がでてきたため、初めてVB2008で作成を試みました。SendKeysを知り、なんとか一連の保存作業(ソフトのツールバーのFile→SaveData→(ファイル名入力)→OK)を、自動化するところまでできたのですが、実行中にマウスポインタを動かしてしまうと正常に動作しなくなってしまうため、イベント中の5~10秒程度マウス操作を無効化したいのですが、やり方が見つかりません。 結構長い時間検索して試してみたのですが、 Cursor.Hide() や Private Sub Button1_MouseMove(・・・) Handles Button1.MouseMove Dim p As Point = New Point(0, 0) System.Windows.Forms.Cursor.Position = p End Sub のような都度ポインタを端に飛ばすような方法では、いくらでもアクティブウィンドウを切り替えられてしまうためうまくいきませんでした。  上のような「マウスが動いたときに都度発生~」といったような監視方法ではメインのイベントが妨げられるようにも感じますので、何かマウス操作を規制・無効にするよい方法がありましたら教えていただければと思います。  もしお詳しい方がいらっしゃいましたら、どうぞよろしくお願いします。

  • VBコンパイルエラー

    エクセルで入力したデータを転送してアクセスで管理するシステムを流用したいのですが、 実行するとコンパイルエラーが発生してしまいます。 作成した際に使用したのはエクセル2000とアクセス2000 今回使用したいのがエクセル2013とアクセス2013です。 下記に記載するのがVBのコードです。 このまま実行すると『プロジェクトまたはライブラリが見つかりません』と表示されます。 Sub データ転送() Dim tempData() As Variant Dim str As String Dim tempDB As DAO.Database Dim tempRecordset As DAO.Recordset Dim intCnt As Integer Dim i As Long Dim j As Long Dim res As VbMsgBoxResult res = MsgBox("データを転送しますか?", vbYesNo + vbExclamation) If res = vbYes Then str = "I:\営業部\近隣関係\稼動分析\近隣稼動データVer104.mdb" Set tempDB = OpenDatabase(str) Set tempRecordset = tempDB.OpenRecordset("Q_調査日カウント") For intCnt = 1 To tempRecordset.Fields.Count Cells(1, intCnt).Value = tempRecordset.Fields(intCnt - 1).Name Next Sheets("データ保持日").Select Columns("A:A").Select Selection.ClearContents Range("A1").CopyFromRecordset tempRecordset tempRecordset.Close tempDB.Close Set tempRecordset = Nothing Set tempDB = Nothing Else MsgBox ("キャンセルしました。") GoTo 0 End If Sheets("入力フォーム").Select If Range("F2").Value = 0 Then Sheets("出力データ").Select With Range("A1").CurrentRegion tempData = .Resize(.Rows.Count - 1).Offset(1).Value End With Set tempDB = OpenDatabase(str) Set tempRecordset = tempDB.OpenRecordset("T_データ") For i = 1 To UBound(tempData, 1) With tempRecordset .AddNew For j = 1 To UBound(tempData, 2) .Fields(j - 1) = tempData(i, j) Next .Update End With Next tempRecordset.Close tempDB.Close MsgBox ("データ転送完了!!") Sheets("入力フォーム").Select Else MsgBox ("データが既に転送済みです。更新する場合はデータベースからデータを削除した後行ってください。") End If 0: Sheets("入力フォーム").Select Range("A1").Select End Sub ダメな所がわかる方ご教授の程よろしくお願いいたします。

  • VB.NETのメモリ領域について

    VB.NETのメモリ領域について 以下の(1)~(12)の変数のために、 スタック領域、静的領域、ヒープ領域のどこのメモリが使われるか教えてください。 Class Sample   Dim a As Integer '(1)   Dim b As String = "BBB" '(2)   Shared c As Integer '(3)   Shared d As String = "DDD" '(4)   Sub X()     Dim f As Integer '(5)     Dim g As String = "GGG" '(6)     Static h As Integer '(7)     Static i As String = "III" '(8)   End Sub   Shared Sub Y()     Dim k As Integer '(9)     Dim l As String = "LLL" '(10)     Static m As Integer '(11)     Static n As String = "NNN" '(12)   End Sub End Class それぞれこんな認識で合ってますか? スタック領域 (1)(5)(9) スタック領域にポインタ+ヒープ領域に実体 (2)(6)(10) 静的領域 (3)(7)(11) 静的領域にポインタ+ヒープ領域に実体 (4)(8)(12)

  • VB2010でのコントロール多次元配列について

    教えてください。 実行中にコントロールを生成したいのですが、 Public Class Form1  Private myTxt(,) As System.Windows.Forms.TextBox  Me.myTxt = New System.Windows.Forms.TextBox(59, 2) {}  Dim i As Integer  Dim j As Integer  Dim h As Integer  Dim p As Integer  h = 10  p = 100  For i = 0 To Me.myTxt.GetLength(0) - 1   For j = 0 To Me.myTxt.GetLength(1) - 1    Me.myTxt(i, j) = New System.Windows.Forms.TextBox    Me.myTxt(i, j).Name = "myTxt" + i.ToString() + j.ToString()    Me.myTxt(i, j).Size = New Size(100, 30)    Me.myTxt(i, j).Location = New Point(p, h)    p = p + 100   Next j   h = h + 30  Next i  Me.myPnl.Controls.AddRange(Me.myTxt) と書くと最後の行が波線になり、 “型 'System.Windows.Forms.TextBox の 2 次元配列' の値を 'System.Windows.Forms.Control' に変換できません。”とエラーになります。 これはAddRangeは多次元配列に使用できないということなのでしょうか? 色々検索してみましたが、コントロールの生成に関する多次元配列が見つけられずに 困っていました。 最後のAddRange(Me.myTxt)をAdd(Me.myTxt(i,j))などと変えたりしても別のエラーになり、 基本的に間違っている気がしますがどこだかがわかりません。 詳しい方、宜しくお願い致します。

  • int + Integer

    もしかしたら初歩的なのかもしれませんが、 Integerオブジェクトはプリミティブ型のように使えることを知りました。 ---------------ソース------------------ Integer integer = new Integer(5); int n = 4; System.out.println(integer); System.out.println(integer + n); -------------------------------------- --------------実行結果----------------- 5 9 --------------------------------------- どういう原理でIntegerオブジェクト(アドレス参照?)と、 プリミティブ型を足して9になるのかがわかりません。 Integerのポインタ参照先自体が5なのでしょうか・・。

    • ベストアンサー
    • Java
  • VB.NETで変数の型は自作できませんか?

    VB.NET2003環境なのですが、 Dim A As Boolean と宣言すると選べるのはTrueかFalseになりますが、 TrueかFalseではなく、Cat、Dog、Mouse、Rabbitなど 自分で好きな選択肢を設定することはできませんか? 例えばこの場合だとInteger型で宣言して、 0をCat、1をDog、2をMouse、3をrabbit、と対応させて 扱っていたのですが、たくさんの種類があったりするとややこしくなってしまったり、 途中まで入力して選択肢が表示されると分かりやすいのですが、 このようなことはできませんでしょうか? 何か方法がありましたら、ご教示頂けると幸いです。 よろしくお願いいたします。

  • VB.NETのことで困っています。

    VB.NETのプログラムで白黒判別プログラムを作成することになったのですが、GetPicxelの使い方が間違っているらしく正しくカウントしてくれません。 ちなみに今作成している問題のプログラムは以下のプログラムです。 Function CountNumColor(ByRef DotWW As Long, ByRef DotHH As Long, ByRef CHECK_C As Long) As Integer Dim Form1 As Object Dim NumEQ As Double Dim NumNot As Long Dim x, y As Long NumEQ = 0 NumNot = 0 System.Windows.Forms.Application.DoEvents() For x = 0 To DotHH - 1 For y = 0 To DotWW - 1 System.Windows.Forms.Application.DoEvents() If CHECK_C = Val("Bitmap.GetPixel(x,y)") Then NumEQ = NumEQ + 1 Else NumNot = NumNot + 1 Debug.Write("x,y,Val(Bitmap.GetPixel(x, y)") End If Next y Next x CountNumColor = NumEQ End Function このプログラムで問題がありましたらぜひとも教えてください。GetPicxel以外の間違いに気づいた人がいた場合もご意見をお待ちしております。また、この質問で分からないことがございましたら遠慮なく書き込んでください。気づき次第返答いたします。

  • ASP.Net(VB)のエラーについて

    始めまして 以下の現象が発生し、解決方法がわからず困っています。 コンパイル エラー メッセージ: BC30002: 型 'NewActiveReport1' が定義されていません。 ソース エラー: 行 6: Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 行 7: Dim lintRowCtr As Integer 行 8: Dim rpt As New NewActiveReport1 行 9: 行 10: 'テーブル内容を初期化 ソース ファイル: c:\inetpub\wwwroot\metabolic\metabolic_system\supportobjectlist.aspx.vb 行: 8 開発環境: OS:WindowsVista 言語:ASP.net (VB) 実行環境: OS:Windows Server 2003 IIS Ver6.0 .NetFramework 2.0 以上の環境下で開発、検証を行っていますが ActiveReportの宣言でエラーが発生しております。 ActiveReportのインストールでサンプルプログラムを実行した時 は正常に動作いたしましたが、そのサンプルプログラムを元に 作成したプログラムが上記のエラーとなって動作しません。 IISの環境設定が間違っているのか、VB.Netの設定が間違っているのか まったくわからない状態となっています。 何かしらのヒントでも良いので、よろしくお願い致します。

  • 【VB2005】です。txtファイルを配列に読み込もうとしています。

    45*45のtxtデータを配列に読み込もうとしているのですが、エラーが出ます。なぜでしょうか? 宜しくお願いします。 【VB2005を使っています。】 Private Sub OpenButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OpenButton1.Click Dim selectButton As DialogResult Dim filename As String Dim i, j As Integer \'開く ダイアログの表示 selectButton = DBOpenDialog1.ShowDialog() filename = DBOpenDialog1.FileName If selectButton = Windows.Forms.DialogResult.OK Then Dim sr As System.IO.StreamReader = Nothing Dim readFields() As String i = 0 sr = New System.IO.StreamReader(filename, System.Text.Encoding.Default) Do Until sr.EndOfStream readFields = sr.ReadLine().Split(\",\") For j = 0 To 44 Tests1(i, j) = readFields(j) Next j i += 1 Loop sr.Close() End If End Sub

  • VB functionについて

    プログラム初心者です。 以下のソースをVB2010で動作させると型'double'の値を'system.Collections.ArrayList'に変換できません。となります。呼び出し方法がおかしいと思うのですが。よく分かりません。解決方法を教えてくださいお願い致します。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim aArr() As Double aArr(1) = 1.1 aArr(2) = 2.3 MsgBox(AAA(aArr)) End Sub Public Function AAA(ByVal aArr As ArrayList) As Double() Dim retVal As Double() = Nothing ReDim retVal(2) Dim loopCnt As Integer = 0 Dim Arrcnt As Integer = aArr.Count Dim sum As Double = 0.0 For loopCnt = 0 To Arrcnt - 1 sum += aArr(loopCnt) Next sum = sum / loopCnt retVal(0) = sum Return retVal End Function

専門家に質問してみよう