VS2013 Comunity C#を使っています。
起動後のフォームを非表示にした後、何らかのイベントでフォームを表示させようとしています。
マイクロソフトの以下の頁を参考にしたら、うまくいったのですが、
//-----------------------------------------------------------------
方法 : スタートアップ Windows フォームを非表示にする
https://msdn.microsoft.com/ja-jp/library/754w18dd(v=vs.110).aspx
//-----------------------------------------------------------------

次のサイトには、「System.Windows.Forms.Loadイベントは一度だけとは限らない」と書いてあります。
http://d.hatena.ne.jp/Kazzz/20070913/p4

今後、プログラムを作っていったときに、都合が悪くならないように以下のようにShow()を使うように書き換えたのですが、メッセージボックスのOKを押した後、フォームを表示せずに終了してしまいます。
なぜなんでしょうか?
書き換える前にはフォームは正常に表示されます。
//********************************************
class MainApplication
{
public static void Main()
{
// Form1 f1 = new Form1();//MS code
Form1 f1 = new Form1();//変更
System.Windows.Forms.MessageBox.Show("The application "
+ "is running now, but no forms have been shown.");
f1.Text = "Running Form";

// f1.ShowDialog();//MS code
f1.Show();//変更

}
}
//*******************************************

質問者からの補足コメント

  • うーん・・・

    すばやい回答ありがとうございます。

    >ということで、やりたいことはなんですか?
    何らかのイベントでフォームを表示させ、各種の設定をしようとしています。

    書かれていることが難しいので、じっくりと読んでみます。
    でも、要するにShowでは簡単にはできないということですね。

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/07/09 10:40
  • うーん・・・

    >ということは、コンソールアプリケーションで作成したのでしょうから、プログラムを起動するとコ>マンドプロンプトが開いたりしませんか?

    「Windows フォームアプリケーション」で作成しています。
    まず、起動時にフォームを表示するアプリケーションを作成した後、イベントで開くように変更するため、前述のMSのサイトのC#プログラムをコピーし、サイトに書かれた手順で起動時にはフォームを表示しないようにしました。
    コマンドプロンプトも開いていないようです。

    とりあえず、ShowDialogで作ってみます。
    ありがとうございます。

    No.2の回答に寄せられた補足コメントです。 補足日時:2015/07/09 13:29

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

A 回答 (2件)

>メッセージボックスのOKを押した後、フォームを表示せずに終了してしまいます。



表示した瞬間にプロセスが終了したのでしょう。

>// f1.ShowDialog();//MS code

https://msdn.microsoft.com/ja-jp/library/c7ykbed …
『 このメソッドが呼び出されると、次に続くコードは、ダイアログ ボックスが閉じるまで実行されません。』
ということで、ダイアログ(フォーム)を閉じるまでそこから先(Main()の終わり)までは進みません。

>f1.Show();//変更

『表示』するだけです。
表示に関して関連するコードは実行されるでしょうが、それだけです。
https://msdn.microsoft.com/ja-jp/library/39wcs2d …

フォーム上のコントロールに対しての操作を継続することもできません。
で、「表示した後、即プロセス終了」ではフォームに対して強制的に閉じる処理が呼び出されるかと思われます。
# フォームのデストラクタが呼ばれる…でしょうね。


ということで、やりたいことはなんですか?
f1.Show()でなければならないのであれば、それ相応の処理を自前でやる必要がありますが…。
# C#でメッセージループを処理…ですかね?
この回答への補足あり
    • good
    • 0

>何らかのイベントでフォームを表示させ、各種の設定をしようとしています。



フォームの初期状態を非表示にしておく…とか。
もっとも、「Windows フォームアプリケーション」で作成しないと「なんらかのイベント」の受信もできませんが。

>public static void Main()

ということは、コンソールアプリケーションで作成したのでしょうから、プログラムを起動するとコマンドプロンプトが開いたりしませんか?
# バッチファイル中から起動などの「既存のコマンドプロンプトから起動」であれば問題ないでしょうけども。
# 無限ループ(実際には適当にSleep()?して、なんらかの通知を待つ…ことになるでしょうけど、その場合でもコンソールアプリケーションが適しているかは微妙ですかね)

Windowsの各種リソースの観点からすると…
必要になった時にそのフォームを開くべきかと思われます。
# 「(各種初期化の時間も惜しんで)即座に開く」という需要でないのなら。
この回答への補足あり
    • good
    • 0

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

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

QC++とC#

C,C++と進みC#
Visual C#がありますが
C++とC#の違いを教えてください.
C++とJAVAをたしたようなもの
なのでしょうか?

Aベストアンサー

文法/構文上の類似点は多々ありますが、「別物」です。
その相違について掲示板で列挙できるものではありません。
# 本を読んでください。

QC#とC++/CLIの連携について

C#とC++/CLIの連携について
C++/CLI側にC#で作成した変数を渡したいのですが、やり方がわかりません。

そもそも一つのソリューションにC++/CLIとC#を混在することはできるのでしょうか。
やはりC++/CLI側はDLLにして、C#がそのDLLを利用するのでしょうか。

Aベストアンサー

.NETの各種言語は混在することができます。
たとえば、C#でGUIの設計をし.NET用DLLを作成し、内部処理をC++でWin32APIを使って書き、C++/CLIでラップして、GUIと結び付ける、とかもできます。

「変数を渡す」というのが表現として良く分かりませんが、変数というよりはクラスを共有する感じになるかと思います。

とはいえC++/CLIはネイティブコードとマネージドコードを混ぜれるがゆえに、逆に色々と問題があるので、ちゃんとネットや本で調べたほうが良いかと思います。

QC++ C# 語源

C++とC#(C++++)はかなり大雑把に言うとCの拡張版ですが、なぜ+が二個単位なのでしょうか。
C → C++ → C#
C+とC+++は存在しないのでしょうか。
C → C+ → C++ → C+++ → C#
もし存在しないのであれば、どのような理由でそうなったのでしょうか。

Aベストアンサー

C/C++のインクリメント演算子が、++だからじゃないでしょうか。

QC#でできてC++でできないことは?(C#のメリットとは?)

これから新しい言語として、C#もしくはC++の勉強をしたいと
考えています。

C#にできてC++にできないこと、あるいはその逆でC++にはできて
C#ではできない。ということがあれば、教えていただけないでしょうか?

感覚としてはC++であれば何でもできるという感じではあるのですが、
C#を使うメリットってどんなことがありますか?
やはり、ビジュアル開発(コントロールのDrag&Dropで画面開発ができる)
の簡単さというところがC#でのメリットでしょうか?

ちなみに私はこれまで、C -> VB -> Java といった順で言語を習得
してきました。

Aベストアンサー

>C#にできてC++にできないこと
無いでしょう。
基本的にC/C++の場合コンパイラの種類に依りますが
内部にアセンブラを書くこともできますから
C/C++で出来ないことはC#でも出来ません。
(勿論#1さんの言われるように言語レベルの仕様で出来ない事はあります。)

簡単さでいうとC#です。VB6の開発経験があるとのことですが
VC#だとVBのフォームを作成するような感じでインターフェースを
作っていけます。(一応VC++でも可能)

一方C#で出来ないことですが
当然ですがフレームワークに依存しないソフトを作る事が出来ません。
Javaで作ったソフトがJREを必要とするのと同じです。
他にはCPUの特殊な命令(SSEやMMX)を呼び出すとかドライバの開発等も出来ません。

ちなみにVC++でもフレームワークは使えるので
フレームワークのガベージコレクション等を使うことは可能です。
(ただフレームワークを使うならC#の方が簡単です。)

QC#でCのコンソール出力の取得

C#でCのコンソール出力の取得
Cで作成したDLLをC#で利用しています。このときDLLファイルはC言語のprintfを使用しています。この出力内容を取得して、C#でテキストボックス等に表示する方法はありませんでしょうか。

Aベストアンサー

使ったこと無いのですが
Googleで調べたところ以下のWebページがヒットしました。

@IT
.NET TIPS
コンソール・アプリケーションの出力を取り込むには?[C#、VB]
http://www.atmarkit.co.jp/fdotnet/dotnettips/657redirectstdout/redirectstdout.html

参考URL:http://www.atmarkit.co.jp/fdotnet/dotnettips/657redirectstdout/redirectstdout.html


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング