DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Formについて

  • 題名: Formについて
  • 著者: gon
  • 日時: 2006/05/24 23:59:57
  • ID: 15976
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
分類:[.NET]

このプログラムなんですが
どうしてもエラーがでてしまいます

public static void Main(string[] args)
{
win = new WinMain();
Application.Run(win);
}

この部分なんですがこれを
WinMain win = new WinMain()
にすればエラーはでないのですがこのMain()メソッドの外に
private WinMain win;
と宣言してnew演算子でオブジェクト化するとエラーになっていまいます
このように宣言したのは他のクラスからも参照できるようにしたいからです
WinMain win = new WinMain()にすると外部クラスからアクセスできないですから
このようにしたのですがこの場合どうしたらいいでしょうか?
この下のサンプルならForm2のクラスをオブジェクト化して
WinMainクラスのメソッドなどのアクセスしたいのです
初心的なことですがお願いしたします
OSはXPです。

using System.Windows.Forms;

class WinMain : Form
{
private WinMain win;

public static void Main(string[] args)
{
win = new WinMain();
Application.Run(win);
}

public WinMain()
{
Form2 form2 = new Form2(win);
}
}

class Form2 : Form
{
private WinMain win;
public Form2(WinMain win)
{
this.win = win;
}
}
とりあえず、staticなメソッドからstaticでないメンバ変数にはアクセスできません。

> Form2 form2 = new Form2(win);
Form2 form2 = new Form2(this);

はダメかなぁ?
できました
あと上のと同じことやっているのですが
これをファイルを分割してやるっているんですが
うまくいきませんサンプル送ります

1つ目
using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace WindowsApplication3
{
static class Program
{
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 form1 = new Form1();
Application.Run(form1);
form1.set_Form(form1);
}
}
}

2つ目
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication3
{
public partial class Form1 : Form
{
public Form1 form1;
public Form2 form2;
public int a;

public Form1()
{
InitializeComponent();
form2 = new Form2();
}

public void set_Form(Form1 form1)
{
this.form1 = form1;
}

private void button1_Click(object sender, EventArgs e)
{
form2.set_a();
}


}

public partial class Form2 : Form
{

public Form1 form1;
public int a;

public void set_Form(Form1 form1)
{
this.form1 = form1;
}

public void set_a()
{
form1.a = 100;
}
}
}



何をやっているか説明すると
Main()メソッドでForm1をインスタンス化
つまりこれがメインウィンドウとなります
そしてform1.set_Form(form1);
でform1はインスタンス化したアドレスになります
それをform1のset_Formでform1のアドレスを渡しています
これでform1インスタンスのForm1のクラス変数に渡しています
このクラス変数はform2など外部クラスに渡したいのですが
Form1クラスのコンストラクタでForm2をオブジェクト化しているのですが
スコープを抜けるとForm2にアクセスできなくなるのですが
スコープを抜けてもアクセスしたいときがあるのですがどうしたら
いいでしょうか?
  • 題名: Re[3]: Formについて
  • 著者: gon
  • 日時: 2006/05/25 2:35:58
  • ID: 15980
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
上のサンプルではなくこちらのほうを
見てください

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace WindowsApplication3
{
static class Program
{
private static Form1 form1;
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
form1 = new Form1(form1);
Application.Run(form1);
}
}
}

using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication3
{
public partial class Form1 : Form
{
public Form1 form1;
public Form2 form2;
public int a;

public Form1(Form1 form1)
{
this.form1 = form1;
InitializeComponent();
form2 = new Form2(form1);
form2.Show();
}
}

public partial class Form2 : Form
{

public Form1 form1;

public Form2(Form1 form1)
{
this.form1 = form1;
Button bt1 = new Button();
bt1.Bounds = new Rectangle(0, 0, 200, 50);
bt1.MouseUp += new MouseEventHandler(OnButton);
Controls.Add(bt1);
}

public void OnButton(object sender, MouseEventArgs e)
{
form1.a = 100;
}

}
}


このように分割してForm1のクラスをインスタンス化
して外部クラスからアクセスしたいのですが
どのようにやればいいのかわかりません
form1 = new Form1(form1);
この場合まだインスタンス化していないのでform1を引数に
してもNULLがはいっているんですがこのような場合
どうのようにすればいいのでしょうか?

DOBON.NET | プログラミング道 | プログラミング掲示板