none
初心者の質問です   お願いします RRS feed

  • 質問

  • 初心者です。

    今No.1のタイマーボタン(Buttonボタンで作成)を押したらNo.2を開きたいです。
    今現在のコードでは開けません。

    そのためのコードを教えてください。

    言語はVisual Basic 2010 Exprssです。


    無駄なコードがあったら教えて欲しいです。


    できれば追加するコードを入れる位置なども教えて欲しいです。

    写真No.1と2はブログに乗っています。
    お手数ですが下のリンクからお願いします。

    http://44522410.at.webry.info/

    回答はこのページでお願いします。

    2013年4月24日 13:29

回答

  • 星 睦美さん>

    > 質問にコードが含まれていませんのでもう一度質問の内容を確認してみてくださいね。

    質問に書いてある URL(質問者さんのブログ?)のページからたどっていくと Visual Studio のスクリーンショットのような画像が貼ってあって、それにコードらしきものがあるようです。だた、それを見て回答できるかどうかは疑問ですが。


    yuukiuehara さん>

    質問の仕方がうまくないです。何も分からないからまる投げしているような感じがします。そもそもコンパイルはできているのでしょうか? デバッガの使い方は知っていて、デバッグしてみたのでしょうか?

    > 今No.1のタイマーボタン(Buttonボタンで作成)を押したらNo.2を開きたいです。
    > 今現在のコードでは開けません。

    まる投げする気はなくて、上記のところだけが問題で、そこさえ解決できれば良いのであれば、「押したらNo.2を開く」のを実現するための必要最小限のコードに削ってみてください。

    その過程で、問題の原因が分かって自己解決できるかもしれません。

    自己解決できなくても、そのコード(あくまで必要最低限の)を提示して、何がどのように期待していた動きと違うのかを書くと回答が得やすいと思います。

    なお、コードを提示する場合は、自分のブログではなく、このフォーラムにコードスニペットを使ってアップすることをお勧めします。


    • 編集済み SurferOnWww 2013年4月25日 2:33 誤記訂正
    • 回答の候補に設定 星 睦美 2013年4月26日 4:26
    • 回答としてマーク 星 睦美 2013年5月7日 6:54
    2013年4月25日 2:17
  • yuukiuehara さま よろしく。

    SurferOnWww さまや ひらぽん さまがお書きになっているように、これからは、コードを載せて下さい。
    その際に、問題点を再現させる最小限の部分に絞って下さい。
    この作業をする事で、問題の把握が出来るようになります。

    さて、それでは。
    先ず、現在のコードは弄らずに、別の名前で新しい Project を作りましょう。

    No.1 の名前は Form1 ( Form1.vb )、 No.2は Form2 ( Form2.vb ) とします。
    Form1 にツールボックス から Button を Form1 に DragDrop して、Button1 の 表示名 を変えます。
    Button1 をダブルクリックして、イベントハンドラを作ります。
    その中に、
     Form2.Show() もしくは Form2.ShowDialog()   の一行を加えます。
     Show() は同時実行、ShowDialog() は Form2 を閉じないと Form1 に戻れません。
    ここで、F5 キーを押して、デバック実行すれば、ご質問の内容が画面で確認出来るはずです。

    このように、ひとつずつ、ステップを踏んで、悪い所を直して行って下さい。

    なお、可能な限り、コード内は全角文字や日本語を使わない事をお勧めします。(文字列や注釈は別)

    また、C:\Users\xxx\Visual Studio 2010\Projects\ 配下の該当プロジェクトファイル群を 別のフォルダに(例えば、USBメモリ)バックアップしておく事をお勧めします。
    (履歴管理の可能なフォルダ構成にしておく事を、更に、お勧め。)
    コードを直してぐちゃぐちゃになった時、元に戻せます。

    ---------------------------------------------------------
    kentaro_ さま よろしく。

    コード拝見しましたが、これでは Form1 を開くと共に、制御は Form2 に移ってしまい、
    Form2 を閉じない限り Form1 のボタンは働かないのでは?

    • 回答の候補に設定 星 睦美 2013年4月26日 4:28
    • 回答としてマーク 星 睦美 2013年5月7日 6:53
    2013年4月25日 5:00

すべての返信

  • yuukiuehara さん、こんにちは
    フォーラム オペレーターの星 睦美です。

    質問から(「無駄なコードがあったら教えて欲しいです。」)、ご自身で作成中のコードを含めて質問されたのではないかと思いますが、質問にコードが含まれていませんのでもう一度質問の内容を確認してみてくださいね。


    日本マイクロソフト株式会社 フォーラム オペレーター 星 睦美

    2013年4月25日 1:47
  • 星睦美さんもおっしゃっていますが、

    コードは必要な部分のみを抜き出して、「ここでこんなエラーが出て解決できません。」といった質問方法がより良いかと思います。

    リンク先のコードを簡略化して、試してみました。

    以下のような感じでForm2の表示が可能かと思います。

    Public Class Form1
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Form2.ShowDialog()
        End Sub
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim bOpen As Boolean
            For Each fSh As Form In Application.OpenForms
                If fSh.Name = Form2.Name Then
                    bOpen = True
                    Exit For
                End If
            Next
            If bOpen = False Then
    
                'もともとのコード
                'Form2 = Nothing
                'Form2 = New Form2
    
                Dim f2 As Form2
                f2 = New Form2
                f2.Show()
            End If
        End Sub
    End Class
    • 編集済み kentahoga 2013年5月7日 8:25 Jittaさんのご指摘を受けてコード修正
    2013年4月25日 2:06
  • 星 睦美さん>

    > 質問にコードが含まれていませんのでもう一度質問の内容を確認してみてくださいね。

    質問に書いてある URL(質問者さんのブログ?)のページからたどっていくと Visual Studio のスクリーンショットのような画像が貼ってあって、それにコードらしきものがあるようです。だた、それを見て回答できるかどうかは疑問ですが。


    yuukiuehara さん>

    質問の仕方がうまくないです。何も分からないからまる投げしているような感じがします。そもそもコンパイルはできているのでしょうか? デバッガの使い方は知っていて、デバッグしてみたのでしょうか?

    > 今No.1のタイマーボタン(Buttonボタンで作成)を押したらNo.2を開きたいです。
    > 今現在のコードでは開けません。

    まる投げする気はなくて、上記のところだけが問題で、そこさえ解決できれば良いのであれば、「押したらNo.2を開く」のを実現するための必要最小限のコードに削ってみてください。

    その過程で、問題の原因が分かって自己解決できるかもしれません。

    自己解決できなくても、そのコード(あくまで必要最低限の)を提示して、何がどのように期待していた動きと違うのかを書くと回答が得やすいと思います。

    なお、コードを提示する場合は、自分のブログではなく、このフォーラムにコードスニペットを使ってアップすることをお勧めします。


    • 編集済み SurferOnWww 2013年4月25日 2:33 誤記訂正
    • 回答の候補に設定 星 睦美 2013年4月26日 4:26
    • 回答としてマーク 星 睦美 2013年5月7日 6:54
    2013年4月25日 2:17
  • 星 睦美さんの返信に補足です。
    リンク先にコードを掲示しておられますが、可能な限り質問にコードを掲示した方がいいと思います。
    質問を見た方が他のサイトを見なくても済むよう配慮すると、フィードバックがより早まる可能性が高くなります。
    以下、メーリングリストで質問するコツやマナーを纏めた記事ですが、MSDNフォーラムでも有用と思われますので是非参考にしてください。

    技術系メーリングリストで質問するときのパターン・ランゲージ


    ひらぽん http://d.hatena.ne.jp/hilapon/

    2013年4月25日 2:25
    モデレータ
  • yuukiuehara さま よろしく。

    SurferOnWww さまや ひらぽん さまがお書きになっているように、これからは、コードを載せて下さい。
    その際に、問題点を再現させる最小限の部分に絞って下さい。
    この作業をする事で、問題の把握が出来るようになります。

    さて、それでは。
    先ず、現在のコードは弄らずに、別の名前で新しい Project を作りましょう。

    No.1 の名前は Form1 ( Form1.vb )、 No.2は Form2 ( Form2.vb ) とします。
    Form1 にツールボックス から Button を Form1 に DragDrop して、Button1 の 表示名 を変えます。
    Button1 をダブルクリックして、イベントハンドラを作ります。
    その中に、
     Form2.Show() もしくは Form2.ShowDialog()   の一行を加えます。
     Show() は同時実行、ShowDialog() は Form2 を閉じないと Form1 に戻れません。
    ここで、F5 キーを押して、デバック実行すれば、ご質問の内容が画面で確認出来るはずです。

    このように、ひとつずつ、ステップを踏んで、悪い所を直して行って下さい。

    なお、可能な限り、コード内は全角文字や日本語を使わない事をお勧めします。(文字列や注釈は別)

    また、C:\Users\xxx\Visual Studio 2010\Projects\ 配下の該当プロジェクトファイル群を 別のフォルダに(例えば、USBメモリ)バックアップしておく事をお勧めします。
    (履歴管理の可能なフォルダ構成にしておく事を、更に、お勧め。)
    コードを直してぐちゃぐちゃになった時、元に戻せます。

    ---------------------------------------------------------
    kentaro_ さま よろしく。

    コード拝見しましたが、これでは Form1 を開くと共に、制御は Form2 に移ってしまい、
    Form2 を閉じない限り Form1 のボタンは働かないのでは?

    • 回答の候補に設定 星 睦美 2013年4月26日 4:28
    • 回答としてマーク 星 睦美 2013年5月7日 6:53
    2013年4月25日 5:00
  • ShiroYuki_Mot 様

    その点は私も疑問点だったのですが、リンク先のコードがそのようになっていたため、そのままにしています。(できる限りもとのコードを利用した方が、自分のコードと照らし合わせて分かりやすいかと思い・・)

    この場合、すぐにForm2が表示されますが、×などで画面消去して、Form1を表示させる必要があります。もしかしたら、ボタンクリックイベントの中で、Form2の存在確認をしていたので、その影響があるのかな?とも思っていました。

    --------------------------------------

    質問方法を少し変えたほうが良いことは確かですが、今回の質問の場合、Form2を表示しようとしている部分のみを修正することで、質問者様の疑問が解決できるのでないか?と思います。


    • 編集済み kentahoga 2013年4月25日 5:49
    2013年4月25日 5:47
  • kentaro_ さま そうでしたか。

    お分かりの上のご投稿でしたか。でも、きっと、どういう動作になるかはご質問者は理解しておられないかと ... 。 元のソースを拝見する限り、Subroutine の Handle 句が抜け落ちたままだったり、とても動作に耐えられない状態と判断し、ソースの内容は無視し、ご質問の文面を優先しました。

    (yuukiuehara さま 失礼な文面ですがご勘弁下さい。)

    2013年4月25日 6:53
  •             Dim f2 As Form2
                f2 = New Form2
                Form2.Show()

     最後、「Form2」ではなく、「f2」ですよね?


    今現在のコードでは開けません。

     今現在のコードでは開けなくて、“どうなる”のでしょうか。

     No.2 の方のコードに青い波下線が引かれている行があります。これ、エラーですよね?ということは、今現在のコードでは「開けません」どころか、「実行できません」ではないでしょうか。

     VB6 の頃は、Nothing を放り込めばよきに計らってくれていましたが、VB.NET では、開発者が明示的に「破棄」を指示して下さい。VB6 までの「開発者ではないソフトウェア作成者向けツール」から、「開発者向け、でもソフトウェア作成者にも使えるツール」に進化しています。破棄の方法については、リファレンスを見て下さい。

     あと、このままだと、プロジェクトが大変なことになりますよ?タイマーや付箋は、プロジェクトを分けて、実行ファイルを起動させるような作りにする方が良くないですか?


    回答はこのページでお願いします。

     「このページ」って、どっちでしょう?ここは「情報交換の場」なので、「回答」といわれても、ねぇ。

     それと、モデレータさんがお願いを忘れていらっしゃるようですが、「質問の内容がわかるタイトル」への編集をお願いします。


    Jitta@わんくま同盟

    2013年4月29日 11:26
  • フォーラム オペレーターの星 睦美です。
    yuukiuehara さん、投稿ありがとうございます。

    今回の質問の参考になりそうだと思いましたので、私からスレッドに[回答としてマーク]しています。
    回答に引き続き質問がありましたら、遠慮なく[回答としてのマークの解除]をして返信できます。

    今回はコミュニティの回答者のみなさんから、フォーラムでテクニカルな内容を質問をするためのヒントをたくさんいただきました。また、フォーラムでは最初に質問のタイトルだけを目にしますので短いタイトルで回答者に内容をうまくつたえることも大事ですね。(Jitta さん、ありがとうございます。)今後の投稿の際に参考にしていただければと思います。

    それでは引き続きMSDN フォーラムをお役立てください。


    日本マイクロソフト株式会社 フォーラム オペレーター 星 睦美

    2013年5月7日 7:19