C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[10]: 親フォームから子フォームのメッソドを使用したい


(過去ログ 63 を表示中)

[トピック内 12 記事 (1 - 12 表示)]  << 0 >>

■36656 / inTopicNo.1)  親フォームから子フォームのメッソドを使用したい
  
□投稿者/ ピクシー (4回)-(2009/06/03(Wed) 12:23:11)

分類:[C#] 

Visual Studio .NET 2003 C# を使用している初心者です。
親フォームから子フォームを開いて、子フォームが開いている状態で、親フォームのイベントによって、子フォームの
メソッドをアクセスさせたいのですが、エラーになっていまいますどのようにしたらよいでしょうか?
教えて下さい
//例
 Form2 f2 = null;

 static void Main()
 {
Application.Run(new Form1());
 }
 private void button1_Click(object sender, System.EventArgs e)
 {
Form2 f2 = new Form2();
f2.Show(); //子フォームを開く
 }
 private void button2_Click(object sender, System.EventArgs e)
 {
f2.TestLabel(); //子フォームのメソッド使用する
 }
引用返信 編集キー/
■36657 / inTopicNo.2)  Re[1]: 親フォームから子フォームのメッソドを使用したい
□投稿者/ .SHO (843回)-(2009/06/03(Wed) 12:30:19)
No36656 (ピクシー さん) に返信

> エラーになっていまいますどのようにしたらよいでしょうか?

どういうエラーになるのですか?

> //例
>  Form2 f2 = null;
>
>  static void Main()
>  {
> Application.Run(new Form1());
>  }
>  private void button1_Click(object sender, System.EventArgs e)
>  {
> Form2 f2 = new Form2();
> f2.Show(); //子フォームを開く
>  }
>  private void button2_Click(object sender, System.EventArgs e)
>  {
> f2.TestLabel(); //子フォームのメソッド使用する
>  }

この例で何を伝えたいのですか?
引用返信 編集キー/
■36658 / inTopicNo.3)  Re[1]: 親フォームから子フォームのメッソドを使用したい
□投稿者/ やじゅ (1023回)-(2009/06/03(Wed) 12:36:31)
やじゅ さんの Web サイト
No36656 (ピクシー さん) に返信

スコープが駄目なんじゃないの
Form2 f2 = new Form2();

f2 = new Form2();
f2.Show(); //子フォームを開く

引用返信 編集キー/
■36659 / inTopicNo.4)  Re[2]: 親フォームから子フォームのメッソドを使用したい
□投稿者/ .SHO (844回)-(2009/06/03(Wed) 12:41:29)
2009/06/03(Wed) 12:42:07 編集(投稿者)

#すいません。カブった。。。

わかった。

「f2」2個宣言してるじゃん。。。

引用返信 編集キー/
■36660 / inTopicNo.5)  Re[3]: 親フォームから子フォームのメッソドを使用したい
□投稿者/ ピクシー (5回)-(2009/06/03(Wed) 12:52:00)
No36659 (.SHO さん) に返信
> 2009/06/03(Wed) 12:42:07 編集(投稿者)
>
> #すいません。カブった。。。
>
> わかった。
>
> 「f2」2個宣言してるじゃん。。。
>
エラー内容は、

private void button2_Click(object sender, System.EventArgs e)
{
f2.TestLabel(); //子フォームのメソッド使用する
}
で、以下が表示される
'System.NullReferenceException' のハンドルされていない例外が TestForm.exe で発生しました。

追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。
引用返信 編集キー/
■36661 / inTopicNo.6)  Re[4]: 親フォームから子フォームのメッソドを使用したい
□投稿者/ カドルドエグ (86回)-(2009/06/03(Wed) 13:01:18)
No36660 (ピクシー さん) に返信
> private void button2_Click(object sender, System.EventArgs e)
> {
> f2.TestLabel(); //子フォームのメソッド使用する
> }
> で、以下が表示される
> 'System.NullReferenceException' のハンドルされていない例外が TestForm.exe で発生しました。
>
> 追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。

ここで使用されている「f2」は、1行目で宣言した
>Form2 f2 = null;
です。
初期値に「null」と入れて以降何もセットされていないので
そのエラーが発生します。

ちなみに、
button1_Click内の
「f2」は、初期値が入っているから等以前に
button1_Clickイベントのメソッド内で完結しています。
つまり、同じ「f2」でも全く別物です。

やじゅさんが既に言及していますが、
「スコープ」という概念について調べるとわかると思います。
引用返信 編集キー/
■36662 / inTopicNo.7)  Re[5]: 親フォームから子フォームのメッソドを使用したい
□投稿者/ ピクシー (6回)-(2009/06/03(Wed) 13:24:10)
No36661 (カドルドエグ さん) に返信
>>private void button2_Click(object sender, System.EventArgs e)
>>{
>>f2.TestLabel(); //子フォームのメソッド使用する
>>}
>>で、以下が表示される
>>'System.NullReferenceException' のハンドルされていない例外が TestForm.exe で発生しました。
>>
>>追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。
>
> ここで使用されている「f2」は、1行目で宣言した
> >Form2 f2 = null;
> です。
> 初期値に「null」と入れて以降何もセットされていないので
> そのエラーが発生します。
>
> ちなみに、
> button1_Click内の
> 「f2」は、初期値が入っているから等以前に
> button1_Clickイベントのメソッド内で完結しています。
> つまり、同じ「f2」でも全く別物です。
>
> やじゅさんが既に言及していますが、
> 「スコープ」という概念について調べるとわかると思います。

では、どのようにしたら、フォーム2のメソッドが使えるのでしょうか?
教えてください。
引用返信 編集キー/
■36665 / inTopicNo.8)  Re[6]: 親フォームから子フォームのメッソドを使用したい
□投稿者/ ぱぱいやん (35回)-(2009/06/03(Wed) 13:37:36)
ぱぱいやん さんの Web サイト
変数には有効な範囲があります。
スコープといいます。
スコープは、ブロックの中だけで有効です。
例えば、以下はエラーになります。

--------------------
{
  int a = 0;
}

{
  Console.WriteLine(a);
}
--------------------

理由は、変数a は、ブロック内でのみ有効だからです。
以下は正しく動きます。

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

{
  int a = 0;
  {
    Console.WriteLine(a);
  }
}

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

スコープは、宣言したブロック以下のブロックでも有効だからです。
あたなのコードをスコープに関係する部分だけ抜き出すと次のようになります。

class Hoge
{
  Form2 f2 = null; // この変数のスコープは?
  private void button1_Click(object sender, System.EventArgs e)
  {
    Form2 f2 = new Form2(); // ここで宣言した f2 のスコープはどこですか?
  }
  private void button2_Click(object sender, System.EventArgs e)
  {
    f2.TestLabel(); //この変数はどこで宣言していて、どのスコープに属しますか?
  }
}



引用返信 編集キー/
■36672 / inTopicNo.9)  Re[7]: 親フォームから子フォームのメッソドを使用したい
□投稿者/ ピクシー (7回)-(2009/06/03(Wed) 14:03:54)
No36665 (ぱぱいやん さん) に返信
> class Hoge
> {
>   Form2 f2 = null; // この変数のスコープは?
>   private void button1_Click(object sender, System.EventArgs e)
>   {
>     Form2 f2 = new Form2(); // ここで宣言した f2 のスコープはどこですか?
>   }
>   private void button2_Click(object sender, System.EventArgs e)
>   {
>     f2.TestLabel(); //この変数はどこで宣言していて、どのスコープに属しますか?
>   }
> }
>
f2.TestLabel()を使用するためには、どのように宣言したらよいのですか
引用返信 編集キー/
■36673 / inTopicNo.10)  Re[8]: 親フォームから子フォームのメッソドを使用したい
□投稿者/ .SHO (846回)-(2009/06/03(Wed) 14:10:47)
> f2.TestLabel()を使用するためには、どのように宣言したらよいのですか

Form2 f2 = new Form2();



f2 = new Form2();

にする。
引用返信 編集キー/
■36686 / inTopicNo.11)  Re[9]: 親フォームから子フォームのメッソドを使用したい
□投稿者/ ピクシー (8回)-(2009/06/03(Wed) 16:55:38)
No36673 (.SHO さん) に返信
>> f2.TestLabel()を使用するためには、どのように宣言したらよいのですか
>
> Form2 f2 = new Form2();
>
> を
>
> f2 = new Form2();
>
> にする。
解決済み
引用返信 編集キー/
■36715 / inTopicNo.12)  Re[10]: 親フォームから子フォームのメッソドを使用したい
□投稿者/ ぱぱいやん (37回)-(2009/06/04(Thu) 10:52:55)
ぱぱいやん さんの Web サイト
解決したみたいだけど、スコープについてわかってもらえたのかなー?
多分、わかってもらえてないよなー
ちょっと残念です。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -