none
VS2019でアプリケーション起動時に実行されるフォームを指定する方法 RRS feed

  • 質問

  • vs2008で書いたコードをvs2019で再編集しようとしています。

    45のフォームのすべてにfrm00Menu~frmxx○○と名前をつけていて,Form1 はありません。
    VS2008では,下のように起動時に実行されるフォームを指定していました。

    <Program.cs>

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Windows.Forms;
    
    namespace SuitoCat
    {
        static class Program
        {
            /// <summary>
            /// アプリケーションのメイン エントリ ポイントです。
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new frm00Menu());
            }
        }
    }
    

    このままで「開始」をクリックしてみると,どいうことか Form1 が表示れます。
        ( Form1 は名前を変えて frm00Menu になっています)

    VS2019でアプリケーション起動時に frm00Menu を実行する方法を教えていただけないでしょうか。

    2019年7月15日 20:18

回答

  • お示しいただいたコードを使わせていただきますが,program.cs に書くのがいいかなと思いやってみます。もし間違っていましたらご指摘願います。

    提示されているコードは「こういったコードを書いているんじゃないの?」という問いかけであり、このコードを書いても解決にはなりません。

    正直なところ、第三者には原因がわからない(普通はやらないこと・陥らない状態になっているので推測困難な)ので、急ぐのであれば新しいプロジェクトにいろいろとコピーして持って行った方が解決早いのでは?という気もします。
    または、ソースコードを公開して直してもらえる人(仕事を受けてくれる人)を待つか、今の感じで気長にやるかですね。
    (たぶん数日かかるのではないだろうか…)

    可能性の一部
    ・ソースコード内にエラーがあり、実はビルドされておらず、前回成功した古いものがずっと実行されている
    ・exe ファイルの更新日時が新しすぎて、更新のためのビルドが実行されていない
    ・InitializeComponent 周りに変なことが起きており、デザイン時の状態に復元する(初期化)コードが実行時には実行されていない

    2019年7月16日 13:35
    モデレータ

すべての返信

  • frm00Menu は実行されているが、そのフォーム画像の左上に表示されているのが Form1 という文字列になっていると言うことではないのですか?

    であれば、その Text プロパティを見てください。Form1 のままになっていると思います。それを望みの文字列に変更してみてください。

    2019年7月15日 21:13
  • frm00Menu にでかでかと目立つダミーのボタンを置いて実行した場合、見た目はどうなりますか?

    ・ボタンが表示される場合
    「Form1 が表示されます」というのが誤解で、正しく frm00Menu が表示されています。
    「Form1」だと思った理由が何かですね。フォームのタイトルであれば Text プロパティを自分で変更してください。

    ・ボタンが表示されない場合
    何らかの問題が起きて、変更が反映されていないようです。
    例えば、エラーが起きている、使っている PC やファイルサーバーの日時がおかしいなど。
    エラーが起きていないか、そのプロジェクトがあるところの vb ファイルや exe ファイルをエクスプローラーで見に行って更新日時が変になっていないかを確認してください。

    2019年7月15日 21:14
    モデレータ
  • SurferOnWwwさん,Azuleanさん,ありがとうございます。

    表示されているるForm1と表示されていないfrm00menuとは明らかに別物です。

    <ひょうじされているForm1>
    ----------------------------------------
    form1                                x
    ---------------------------------------- 

     コントロールも
     画像もありません

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

    <表示されないfrm00menu>(タイトルバーは表示していません)
    ------------------------------------------

     背景画像と
     タブコントロール,ボタン
     などがレイアウトされています

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

    2019年7月15日 21:55
  • 別に新しい Windows Forms プロジェクトを作成して、自動生成されている Form1 を、どのような手順で名前を変えると今の問題が再現できるか、ステップバイステップでできるだけ詳しく書いていただけませんか? Form は一つだけでやってみてください。

    その過程で原因がわかって自己解決できそうな気がします。

    2019年7月15日 23:12
  • 再現を試みようとしましたが,右クリックでしか名前の変更する方法しかわからず,今の問題を再現できないでいます。
    2019年7月16日 0:35
  • > 右クリックでしか名前の変更する方法しかわからず,

    それはどうやったんですか?

    何にしても、

    > 今の問題を再現できないでいます。

    ということは期待通りクラス名 Form1 は Program.cs を含めたコードで全ての中で frm00Menu に書き換わって、問題なしということですか。(左上の表示は Text を変えない限り Form1 のままだと思いますが)
    2019年7月16日 1:04
  • SurferOnWwwさん,何度も返信をくださりありがとうございます。

    実際の場面を想定したほうがいいのではと思い,Form1のタイトルバーは表示しない設定にしております。ですから,Textプロパティは空欄になっております。

    それで変更できるのはnameプロパティだけになりますので,form1とFormMenuの2通りを試してみましたが,両方ともに
    FormMenu が正常に表示されます。私は左上のTextはまったく気にしません。

    ところが現在の状況はこのようなフォームが表示されてしまいます。このフォームはソリューションの一覧にはないのになぜこれが表示されるのかがわからないので困っているのです。

    私がおききしたいことは「Program.csでプログラム開始時にFormMenuを開くように設定しているのになぜ幽霊のようにForm1が表示されるのだろうか」ということなのですが,よろしくお願いします。

    <追加>Form1にForm2を追加した後にForm1を削除し,Program.csでForm2を指定して実行したら現在の状況と同じようにForm1が表示されるのではないだろうかと思って確かめたところ正常にForm2が表示されました。


    • 編集済み goodwave 2019年7月16日 4:40 追加
    2019年7月16日 4:11
  • > 私がおききしたいことは「Program.csでプログラム開始時にFormMenuを開くように設定しているのになぜ幽霊のようにForm1が表示されるのだろうか」ということなのですが,よろしくお願いします。

    質問者さんが何をした結果そうなるのか不明なので分かりません。

    前の私のレスで書いた、

    > 別に新しい Windows Forms プロジェクトを作成して、自動生成されている Form1 を、どのような手順で名前を変えると今の問題が再現できるか、ステップバイステップでできるだけ詳しく書いていただけませんか? Form は一つだけでやってみてください。

    ・・・の結果はどうだったのですか?

    > 期待通りクラス名 Form1 は Program.cs を含めたコードで全ての中で frm00Menu に書き換わって、問題なしということですか。

    ・・・とお聞きしたことに返事が無いのですが、まずそれに返事してください。違うことをされたり、別の方向に進んで行ってしまったりされてはフォローしきれません。
    2019年7月16日 5:03
  • たとえば

    public static DialogResult Foo() {
        var f = new Form1();
        return f.ShowDialog();
    }
    

    こんなメソッドを作って、frm00menu のフィールドやコンストラクタなどで参照すれば Form1 が表示されます。

    Form1 がプロジェクトに無いのであれば、参照しているライブラリのメソッドで実行されているのかもしれませんね。

    プログラムの作り方次第でどうにでもできる話なので、frm00menu が行っている処理を一つ一つ確認していくしかないのでは?

    2019年7月16日 5:57
  • ご厚意で返信をいただいてますのに不快な思いを抱かせてしまいましたことをお詫びいたします。

    ソリューションでの         プロパティ                                              実行結果の
      表示名   name        text          program.cs      タイトル
    ------------------------------------------------------------------------------
    Form1            Form1           Form1            Form1             Form1
    Form1            Form1           FormMenu      Form1             FormMenu
    Form1            FormMen       Form1            FormMenu      Form1
    Form1            FormMen       FormMenu      FormMenu      FormMenu
    FormMenu      Form1           Form1            Form1             Form1
    FormMenu      Form1           FormMenu      Form1             FormMenu    *太字の両者の関係!
    FormMenu      FormMen       Form1            FormMenu       Form1
    FormMenu      FormMen       FormMenu      FormMenu       FormMenu

     

    2019年7月16日 7:09
  • KOZ6.0さん,ありがとうございます。

    >frm00menu が行っている処理を一つ一つ確認していくしかないのでは?

    アプリをはじめてつかうときに。フォームfrm00Sirial を表示してシリアル文字を入力してもらう仕様になっていて,その後このフォームを削除したのが,たしかに今の状況に影響しているのかもしれません。

    お示しいただいたコードを使わせていただきますが,program.cs に書くのがいいかなと思いやってみます。もし間違っていましたらご指摘願います。



    • 編集済み goodwave 2019年7月16日 7:36
    2019年7月16日 7:22
  • 依然として聞いたことに答えていただけてなく話が噛み合っていないようですが・・・

    提示いただいた表で、

    「プロパティ name」の FormMen は FormMenu の間違いですよね?

    「program.cs」欄に書いてある Form1 とか FormMenu は Program.cs のコード Application.Run(new <class name>()); の <class name> のことですよね?

    であれば、「ソリューションでの表示名」とは何だかわかりませんがそれはちょっと置いといて・・・

    「Name プロパティ」=「フォームのクラス名」になるはずですがそれは確認されました? 「Name プロパティ」は Application.Run(new <class name>()); の <class name> と同じであれば、幽霊のように違うクラスのフォームが表示されるということはないはずです。 

    2019年7月16日 7:59
  • お示しいただいたコードを使わせていただきますが,program.cs に書くのがいいかなと思いやってみます。もし間違っていましたらご指摘願います。

    提示されているコードは「こういったコードを書いているんじゃないの?」という問いかけであり、このコードを書いても解決にはなりません。

    正直なところ、第三者には原因がわからない(普通はやらないこと・陥らない状態になっているので推測困難な)ので、急ぐのであれば新しいプロジェクトにいろいろとコピーして持って行った方が解決早いのでは?という気もします。
    または、ソースコードを公開して直してもらえる人(仕事を受けてくれる人)を待つか、今の感じで気長にやるかですね。
    (たぶん数日かかるのではないだろうか…)

    可能性の一部
    ・ソースコード内にエラーがあり、実はビルドされておらず、前回成功した古いものがずっと実行されている
    ・exe ファイルの更新日時が新しすぎて、更新のためのビルドが実行されていない
    ・InitializeComponent 周りに変なことが起きており、デザイン時の状態に復元する(初期化)コードが実行時には実行されていない

    2019年7月16日 13:35
    モデレータ
  • SurFerWwwさん,すべてを(何をかは省かせていただきますが)frm00menu として実行してみましたが,やはりForm1が表示されます。

    >正直なところ、第三者には原因がわからない

    単に報告ですが,試しに新しいフォームを追加したところForm1ではなくForm2が追加されました。

    >新しいプロジェクトにいろいろとコピーして持って行った方が解決早いのでは?という気もします。

    私も最初にそのようにすることを考えたのですが,私にとってはコピーできるのかコピーできないのかがわからないものがあります。
    たいがいのものは,追加->既存の項目 でできるのですがデータベースのSQLをコピーできないでいます。
    赤枠のものは個々に追加できますが
    図に示されているように,フォルダのような suitoDataSet.xsd におさめられています。

    この suitoDataSet.xsd をコピー・追加 する方法はあるのでしょうか。

    方法がないとすると,終活ということでSQLに関する書籍はすべて処分してしまっているので,一からSQLを書き直す元気はなくあきらめるしかありません。

    >可能性の一部

    ビルドし直して様子を見ることにします。



    • 編集済み goodwave 2019年7月16日 20:09 追加
    • 回答としてマーク goodwave 2019年7月16日 23:26
    • 回答としてマークされていない goodwave 2019年7月16日 23:26
    2019年7月16日 20:01
  • suitoDataSet.xsd を他のものと同様に追加することができました。

    SurferOnWwwさん,KOZ6.0さん,Azuleanさんありがとうございました。

    2019年7月16日 23:26