ページ 1 / 1
c#で別フォームを表示する
Posted: 2018年5月20日(日) 13:04
by scorekeke
初投稿です。
windowsフォームを利用し、Form1をロードした時にForm2を表示させるプログラムをC#で作っているのですが、
コード:
private void Form1_Load(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.Show();
}
このイベントで表示させようとしたのですが、
「アプリケーションのコンポーネントでハンドルされていない例外が発生しました」のエラーの後、動作が終了してしまうエラーが出てしまいます。
このエラーの原因に何か心当たりがある方はいらっしゃいませんか?
抽象的な話になってしまい申し訳ありませんが、宜しくお願い致します。
※私のC#知識は市販教科書を2冊読んだ程度で、勉強を始めて2カ月程度になります。
Re: c#で別フォームを表示する
Posted: 2018年5月21日(月) 20:41
by Math
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はデフォルトでコンソールアプリケーションとしてコンパイルされています)
最小限これだけで良いので何か不備があるはずです。(^^;
Re: c#で別フォームを表示する
Posted: 2018年5月22日(火) 09:28
by usao
Form1_Load()を抜ける時点でform2への参照がなくなってしまうように見える.
(試しにform2をForm1のメンバにしたらどうなるのでしょう?)
Re: c#で別フォームを表示する
Posted: 2018年5月24日(木) 08:39
by Math
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
Re: c#で別フォームを表示する
Posted: 2018年5月24日(木) 09:10
by Math
C#はC++と違ってポインターが可変であること、主要DLLの参照設定はレスポンス・ファイルで設定されており不要であることなどの違いがあります。ガベージコレクションがじどうで行われC++に比べてメモリーリークが少なく非常に安定して動くこと OSの一部であることがちがいます。[雑談]
Re: c#で別フォームを表示する
Posted: 2018年5月24日(木) 09:33
by Math
>OSの一部であることがちがいます。[雑談]
.NetFrameworkがOSの一部である。その開発げんごがC#。PowerSellもC#で開発されていてUnix shell互換のfreeソフトになりUnixにもいしょくされてるようです。(BashとGCCみたいなものです)