c#で別フォームを表示する

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
scorekeke

c#で別フォームを表示する

#1

投稿記事 by scorekeke » 6年前

初投稿です。
windowsフォームを利用し、Form1をロードした時にForm2を表示させるプログラムをC#で作っているのですが、

コード:

        private void Form1_Load(object sender, EventArgs e)
        {
            Form2 form2 = new Form2();
            form2.Show();
        }
このイベントで表示させようとしたのですが、
「アプリケーションのコンポーネントでハンドルされていない例外が発生しました」のエラーの後、動作が終了してしまうエラーが出てしまいます。
このエラーの原因に何か心当たりがある方はいらっしゃいませんか?

抽象的な話になってしまい申し訳ありませんが、宜しくお願い致します。

※私のC#知識は市販教科書を2冊読んだ程度で、勉強を始めて2カ月程度になります。

Math

Re: c#で別フォームを表示する

#2

投稿記事 by Math » 6年前

WindowsのみでC#コンパイルする場合。(VisualStudio不要)
バッチファイルc.batをダブルクリックすればよいです。
c.bat

コード:

C:\windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe c1.cs

c1.exe

pause
c1.c

コード:

using System;
using System.Windows.Forms;
namespace Test
{
    class Program 
    {
        static void Main() 
        {
            Application.Run(new Form1());
        }
    }
    public class Form1 : Form
    {
	public Form1()
        {
          this.Text = "Form1";
          this.Load += new System.EventHandler(this.Form1_Load);
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            Form2 form2 = new Form2();
            form2.Show();
        }
    }
    public class Form2 : Form
    {
	public Form2()
        {
          this.Text = "Form2";
        }
    }
}
実行
http://www2.koyoen.birdview.co.jp/~abcxyz/x0521.png

(c1.exeはデフォルトでコンソールアプリケーションとしてコンパイルされています)
最小限これだけで良いので何か不備があるはずです。(^^;

アバター
usao
記事: 1887
登録日時: 11年前

Re: c#で別フォームを表示する

#3

投稿記事 by usao » 6年前

Form1_Load()を抜ける時点でform2への参照がなくなってしまうように見える.
(試しにform2をForm1のメンバにしたらどうなるのでしょう?)

Math

Re: c#で別フォームを表示する

#4

投稿記事 by Math » 6年前

form2をForm1のメンバにしたらform1からform2を制御できます。その違いですね。

c.bat --- 今回はWindowsアプリケーションとしてコンパイル。

コード:

C:\windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /t:winexe c1.cs

c1.exe

pause
c1.cs

コード:

using System;
using System.Windows.Forms;
using System.Drawing;
namespace Test
{
    class Program 
    {
        static void Main() 
        {
            Application.Run(new Form1());
        }
    }
    public class Form1 : Form
    {
        Form2 form2;
        Button button1;

	public Form1()
        {
          this.Text = "Form1";

          this.button1 = new Button();
          this.button1.Location = new System.Drawing.Point(20, 20);
          this.Controls.Add(this.button1);

          this.Load += new System.EventHandler(this.Form1_Load);
          this.button1.Click += new System.EventHandler(this.button1_Click);
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            form2 = new Form2();
            form2.Show();
        }
        
        private void button1_Click(object sender, EventArgs e)
        {
            this.form2.Text = "Form1 Clicked --- !";
        }
    }
    public class Form2 : Form
    {
	public Form2()
        {
          this.Text = "Form2";
        }
    }
}
http://www2.koyoen.birdview.co.jp/~abcxyz/x0522a.png
http://www2.koyoen.birdview.co.jp/~abcxyz/x0522b.png

Math

Re: c#で別フォームを表示する

#5

投稿記事 by Math » 6年前

C#はC++と違ってポインターが可変であること、主要DLLの参照設定はレスポンス・ファイルで設定されており不要であることなどの違いがあります。ガベージコレクションがじどうで行われC++に比べてメモリーリークが少なく非常に安定して動くこと OSの一部であることがちがいます。[雑談]

Math

Re: c#で別フォームを表示する

#6

投稿記事 by Math » 6年前

>OSの一部であることがちがいます。[雑談]
.NetFrameworkがOSの一部である。その開発げんごがC#。PowerSellもC#で開発されていてUnix shell互換のfreeソフトになりUnixにもいしょくされてるようです。(BashとGCCみたいなものです)

返信

“C言語何でも質問掲示板” へ戻る