VB6.0のForm遷移での問題:移動がうまくいかない理由と解決方法

このQ&Aのポイント
  • VB6.0のForm遷移において、2回目の移動がうまくいかない現象が発生しています。
  • 問題の原因はプログラムにあり、Form1からForm2への移動後、再度Form1からForm2に移動するとBeep音が鳴り移動できなくなります。
  • これは、Form1が非表示になっていないために起こる問題であり、解決方法はForm1を非表示にすることです。
回答を見る
  • ベストアンサー

vb6.0のFormの遷移がうまくいきません。

Form1からForm2に移動するときのプログラム Private Sub Command5_Click() Form2.Show With Form1 .Enabled = False .Visible = False End With End Sub です。 Form2からForm1に移動するときのプログラム Private Sub Command1_Click() Form1.Show With Form2 .Enabled = False .Visible = False End With End Sub Form1からForm2に移動し、Form2からForm1に移動する 事は出来たのですが。もう一度、Form1からForm2に 移動しようとするとBeep音が鳴り移動できません。 なぜ、2回目は失敗するのでしょうか? プログラムに問題はありますか?

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

  • ベストアンサー
  • pppc88
  • ベストアンサー率43% (40/93)
回答No.1

Form1 から Form2に移るときにForm1をEnabled = Falseとしているため、Form2から戻った場合、その状態で開くため上手く動かないようです。 Form2からもどる時に、Form1.Enable=Trueとするか、見えないフォームに(Visible=Flse)Enableを設定してもあまり意味がないフォーム設計の場合は(ユーザーには見えないのだから結局使えない)、この記述自体(Enable=False)を抹消しまうか、Visibleではなく、Hideメソッドを使うように書き換えるかといった対策がありそうです。

morumomo
質問者

お礼

Form1.Enabled=Trueと追加したところ、思うとおりの 操作をすることができました。 ありがとうございます。

関連するQ&A

  • クリックした場所にFormを開く

    教えてください! VBでクリックした場所にFormを開くには、どうしたらいいですか? Private Sub Command3_Click() Frm.Show End Sub

  • VB6でスロットを作成したい

    VB6歴2ヶ月の初心者です。 フォーム上に ラベルコントロールが三つ コマンドボタンが二つ タイマーコントロールが一つ あります。 タイマーのプロパティは Enabled False Interval 10 です。 スロットを作成したいのですが、 ボタン1を一回押すごとに左からスロットが回り、 最後にボタン2で動きを止めたいのです。 一応自分でも書いてみたのですが、ここで行き詰まりました。 ウワァァァァァァヽ(`Д´)ノァァァァァァン! Private Sub Command1_Click() Timer1.Enabled = True End Sub Private Sub Command2_Click() Timer1.Enabled = False End Sub Private Sub Timer1_Timer() Dim slot As Integer slot = Int(Rnd(1) * 9 + 1) Label1.Caption = slot End Sub 思い通りに動かすにはどんなコードにしたらいいですか?

  • VB初心者です

    計算結果が"7"の時に限り、「当たり!」と表示される、ちょっと意味不明な計算機を作っています。 現在、下記のように書いてますが、何故かうまくいきません。(当たりが表示されない 何故でしょうか?お助けください。。m(_ _)m Private Sub Command1_Click() Label1.Caption = Str(Val(Text1.Text) + Val(Text2.Text)) Label3.Caption = "+" Label4.Visible = False '画像を隠す。 'いずれかの数字が「7」のとき、メッセージを表示する。 If Label1.Caption = "7" Then Label4.Visible = True End If End Sub Private Sub Command2_Click() End End Sub Private Sub Command3_Click() Label1.Caption = Str(Val(Text1.Text) * Val(Text2.Text)) Label3.Caption = "*" End Sub Private Sub Command4_Click() Label1.Caption = Str(Val(Text1.Text) - Val(Text2.Text)) Label3.Caption = "-" End Sub Private Sub Command5_Click() Label1.Caption = Str(Val(Text1.Text) / Val(Text2.Text)) Label3.Caption = "/" End Sub

  • 画像のランダム表示

    初心者なのですがVisual Studio6.0でもぐらたたきゲームを利用した作品を現在制作しています。内容は決まった画像がランダムでImageコントロールに表示され、それをクリックできると画像が変わり得点加算、クリックできないと画像が変わり減点というゲームです。現在Imageコントロールに決まった画像を呼び出す処理が完成しました。そして追加機能としてクリックできたらボーナスポイントの画像をImageコントロールに何分の何かの確率で表示させたいのですがわからない状態です。ちなみに画像は私のパソコンのDドライブから呼び出して表示させています。 どういった命令文を打ったら良いのかわかる方教えて下さい。宜しくお願いします。 こちらがプログラムです。 Option Explicit Const MinImgAry = 0 Const MaxImgAry = 15 Const GameTime = 15 Dim HitFlg As Integer Dim TEN As Integer Dim HoleNum As Integer Dim IconAry(2) As String Private Sub Command1_Click() Command1.Enabled = False Option1.Enabled = False Option2.Enabled = False Option3.Enabled = False HitFlg = 0 TEN = 0 Text1.Text = Str(TEN) Timer1.Enabled = True Timer2.Enabled = True End Sub Private Sub Command2_Click() Form1.Show End Sub Private Sub Form_Load() Dim StrPath As String StrPath = App.Path If Right(StrPath, 1) <> "\" Then StrPath = StrPath + "\" End If IconAry(0) = "D:制作\5\画像1.bmp" IconAry(1) = "D:制作\5\画像2.bmp" IconAry(2) = "D:制作\5\画像3.bmp" End Sub Private Sub Image1_Click(Index As Integer) Image1(Index).Enabled = False HitFlg = -1 End Sub Private Sub Option1_Click() Timer1.Interval = 1000 End Sub Private Sub Option2_Click() Timer1.Interval = 800 End Sub Private Sub Option3_Click() Timer1.Interval = 500 End Sub Private Sub Timer1_Timer() Static CtlFlg As Integer Select Case CtlFlg Case 0 Image1(HoleNum).Enabled = False Image1(HoleNum).Visible = False HoleNum = Int((MaxImgAry - _ MinImgAry + 1) * Rnd + MinImgAry) Image1(HoleNum).Picture = _ LoadPicture(IconAry(0)) CtlFlg = 1 Image1(HoleNum).Visible = True Image1(HoleNum).Enabled = True Exit Sub Case 1 Image1(HoleNum).Enabled = False If HitFlg Then HitFlg = 0 Image1(HoleNum).Picture = _ LoadPicture(IconAry(2)) TEN = TEN + 1 Text1.Text = Str(TEN) Else Image1(HoleNum).Picture = _ LoadPicture(IconAry(1)) TEN = TEN - 1 Text1.Text = Str(TEN) End If CtlFlg = 0 Exit Sub End Select End Sub Private Sub Timer2_Timer() Static TimeCnt As Long TimeCnt = TimeCnt + 1 If TimeCnt <> GameTime Then Exit Sub End If Timer1.Enabled = False Timer2.Enabled = False MsgBox "おしまい" TimeCnt = 0 Command1.Enabled = True Image1(HoleNum).Enabled = False Image1(HoleNum).Visible = False Option1.Enabled = True Option2.Enabled = True Option3.Enabled = True End Sub

  • VB.NET Form1からForm2を開いたり閉じたりする方法

    VB.NET2005でForm1にあるCheckBoxをTrueにするとform2をモードレスフォームとして開き、CheckBoxをFalseにするとform2を閉じる方法がわかりません。また、form2の[×]で閉じた時にはForm1にあるCheckBoxをFalseにする方法がわかりません。 '----------------------------------- Private Sub CheckBox2_CheckedChanged ・・・   Dim f_cnt As Integer   Dim form2 As New Form2()   f_cnt = My.Application.OpenForms.Count   If CheckBox1.Checked = True Then     If f_cnt = 1 Then form1.Show() 'モードレスフォームとして表示する   Else    form2.Close() ←閉じない   End If End Sub '-----------------------------------

  • 「Me.Form」と「Me」の違いは?

    アクセスのフォームで並べ替えをする時、 --------------------------------------------------------- Private Sub cmd_昇順_Click() With Me.Form .OrderBy = "フィールド1 ASC" .OrderByOn = True End With End Sub でも Private Sub cmd_昇順_Click() With Me .OrderBy = "フィールド1 ASC" .OrderByOn = True End With End Sub --------------------------------------------------------- でも出来ますが、 「Form」は必要なのでしょうか? あってもなくてもどっちでもいいなら、理由が知りたいです。

  • VB6.0でMSChartをタイマーを使い徐々にグラフを伸ばしたい。

    VB6.0でMSChartをタイマーを使い徐々にグラフを伸ばしたいのですが、上手くいきません。コマンドボタンを使いクリックしたと同時にタイマーを作動させて、ある値までグラフを増加させたいと思っているのですが、初心者同然なので詳しくお願いします。 Dim dat(4, 3) As Integer Dim a As Long Private Sub Command1_Click() With MSChart1 .chartType = VtChChartType3dBar .ColumnCount = 3 .RowCount = 4 For i = 1 To .RowCount For j = 1 To .ColumnCount .Column = j .Row = i .Data = dat(i, j) Next j Next i .DataGrid.ColumnLabel(1, 1) = "(1)" .DataGrid.ColumnLabel(2, 1) = "(2)" .DataGrid.ColumnLabel(3, 1) = "(3)" .DataGrid.RowLabel(1, 1) = "1月~3月" .DataGrid.RowLabel(2, 1) = "4月~6月" .DataGrid.RowLabel(3, 1) = "7月~9月" .DataGrid.RowLabel(4, 1) = "10月~12月" .Visible = True End With Timer1.Enabled = True End Sub Private Sub Form_Load() a = 0 MSChart1.Visible = False End Sub Private Sub MSChart1_OLEStartDrag(Data As MSChart20Lib.DataObject, AllowedEffects As Long) End Sub Private Sub Timer1_Timer() a = a + 10 dat(1, 1) = a: dat(1, 2) = 100: dat(1, 3) = 110 dat(2, 1) = 30: dat(2, 2) = 110: dat(2, 3) = 110 dat(3, 1) = 40: dat(3, 2) = 120: dat(3, 3) = 110 dat(4, 1) = 50: dat(4, 2) = 130: dat(4, 3) = 110 If a = 100 Then Timer1.Enabled = False End If End Sub

  • VB6のform Load

    Private Sub Form_Load() Form1.ScaleMode = 0 Form1.Scale (-10, 10)-(10, -10) Form1.Line (-10, 0)-(10, 0) Form1.Line (0, -10)-(0, 10) End Sub とやって座標画面を作ろうとしましたが Lineが表示されません。 仕方が無いので Private Sub Form_Load() Form1.ScaleMode = 0 Form1.Scale (-10, 10)-(10, -10) End Sub Private Sub Form_Activate() Form1.Line (-10, 0)-(10, 0) Form1.Line (0, -10)-(0, 10) End Sub とやりました。 そういうものだとあきらめるしかないのでしょうか?

  • アプリからVB(Form)

    初心者ですが教えていただきませんか? やりたい事(順序) 1. Form1が開いています。(ノーマル表示) 2. Form1のcommand1ボタンを押す事により 3. Form1が最小化され 4. WORDが起動され、ファイルが開きます。(WORD最大表示) 5. WORDが終了(閉じられた時) 6. Form1が開きます。(ノーマル表示) 5番と6番で詰まっております。 ご教授をお願い致します。 コード Private Sub Command1_Click(Index As Integer) Dim wdApp As Object Dim ThisPos As Long WindowState = vbMinimized Set wdApp = CreateObjec("Word.Application") wdApp.Visible = True Set wddocuments = wdApp.Documents.Open("C:\test.doc") ThisPos = Application.WindowState 'アプリの画面表示を変更する If ThisPos = wdWindowStateNormal Then wdApp.WindowState = wdWindowStateMaximize Else wdApp.WindowState = wdWindowStateMaximize End If Set wdApp = Nothing    End Sub

  • 保存の仕方

    こんにちは、次のようなアドレスを入力するとそのソースを表示するプログラムを作ったのですがこれで表示されるソースに名前を付けて保存することってできますか?お願いします。 Private Sub Command1_Click() Dim strUrl As String Dim strBuf As String Command1.Enabled = False strUrl = InputBox("URLを入力して下さい.") If (Len(strUrl) = 0) Then Exit Sub End If Command1.Enabled = True strBuf = Inet1.OpenURL(strUrl) Form2.Show Form2.Text1.Text = strBuf End Sub Function Getsource() As String Dim strBuf As String Dim strUrl As String strBuf = Inet1.OpenURL(strUrl) 'ファイル内容を取得 Getsource = strBuf End Function

専門家に質問してみよう