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

FormからFormへの干渉

環境/言語:[XP VB.NET]
分類:[.NET]

2004/11/20(Sat) 00:17:32 編集(投稿者)

はじめまして。beanjamと申します。「超」が2つくらいつく初心者です。

現在、Formが複数あるプログラムを作成しようとしているのですが
Form2から、Form1への干渉がうまくいきません。

たとえば、Form2上のButton1をクリックすると、
Form1のLabel1のテキストが消えるようにするようにするには
どうすればよいのでしょうか??

以下のようなコードを作成してみたのですが・・・

---------------------------------------------
[Form2]

Public F1 As Form1

Private Sub Button1_Click(ByVal sender As Object,
  ByVal e As System.EventArgs) Handles Button1.Click

F1.Label1.text = ""

End Sub
-----------------------------------------

これではプログラムを走らせている途中で
「追加情報 : オブジェクト参照がオブジェクト
 インスタンスに設定されていません。」というエラーがでてしまいます。


初歩的な問題かと思うのですが解決できず困っております。
アドバイスを頂けると助かります。

どうぞよろしくお願いいたしますm(u u)m
Form2からForm1のLabelなどを操作したい
と、言う事でしょうか?
それなら、いくさんのサイトにありました。
以下引用文です。
回答: 共通モジュールなどに、
Public Form As Form1  と設定します。

Form2を立ち上げる(Show)する前に、
form = me  と設定しておく

そうすることによって、Form2では
form.Label1.Text = "abcde" と設定できます
以上引用文です。
もし違っていたらすみません。
YUSKさん、丁寧なお返事どうもありがとうございました!m(_ _)m

早速、試みようとしたのですが・・・
> Form2を立ち上げる(Show)する前に、
> form = me  と設定しておく
ということなのですが
”form = me ”
という記述などをどこに書けばよいのかわかりませんでした。
===================================
[Form1]

Public Form As Form1 ’※
Dim F2 As New Form2
(中略)

Private Sub Button1_Click(ByVal sender As Object,
  ByVal e As System.EventArgs) Handles Button1.Click

Form = Me       ’←Form2を立ち上げる前???
F2.ShowDialog() ’←この処理自体はうまくいく。

End Sub
----------------------------------
[Form2]
Private Sub Button1_Click(ByVal sender As System.Object,
   ByVal e As System.EventArgs) Handles Button1.Click

Form.label1.text = ""  '←ここで波線が引かれる。

End Sub
===================================
    ※の行をForm2に移してもエラーがでます。

などいろいろやってみたのですが・・・

いくさんの《初心者の館》のページにも行ってみて
質問集、掲示板ログを一通りあたってみたのですが未解決です。 

勉強不足のため、わからないことだらけで申し訳ないのですが・・・
もし、何か気づかれる点がありましたらご指摘いただければありがたいです。
VB.NETは詳しくないので、間違っているかもしれませんが・・・。
Form.label1.text = ""  '←ここで波線が引かれる。
の所を、 Form.Form1.label1.text = ""
と、してみて下さい。
■No7564に返信(YUSKさんの記事)
> VB.NETは詳しくないので、間違っているかもしれませんが・・・。
> Form.label1.text = ""  '←ここで波線が引かれる。
> の所を、 Form.Form1.label1.text = ""
> と、してみて下さい。

今日は 平ちゃんです。

> の所を、 Form.Form1.label1.text = ""
 これは Form1.Form.Label1.Text = "" '←ここで波線が引かれる。
として宣言部分を 
Public Shared Form As Form1 とします。

また
>回答: 共通モジュールなどに、
>Public Form As Form1  と設定します。

>Form2を立ち上げる(Show)する前に、
>form = me  と設定しておく

>そうすることによって、Form2では
>form.Label1.Text = "abcde" と設定できます
>以上引用文です。

この方法ですと
Public Form As Form1 ’※
の宣言場所をモジュールに移動します。
プロジェクトにモジュールを追加して
Module Module1
Public Form As Form1 '※
End Module
のようにすれば動作します。


beanjam さんが超超初心者ということなので
この2つの方法は解りやすいと思いますが
一般的に嫌われている方法です。
他に色々方法があります。
超超初心者には難しいでしょうが一応参考にして下さい。

http://dobon.net/vb/dotnet/form/accessanotherformdata.html
どうもありがとうございました!!

YUSK さん、平ちゃん さん、
超超初心者に対しても丁寧にお答えいただき感謝いたします。
平ちゃん さんのアドバイスにあるように

Public Shared Form As Form1

と宣言することによって、ひとまず解決しました。

> beanjam さんが超超初心者ということなので
> この2つの方法は解りやすいと思いますが
> 一般的に嫌われている方法です。
> 他に色々方法があります。
> 超超初心者には難しいでしょうが一応参考にして下さい。
>
> http://dobon.net/vb/dotnet/form/accessanotherformdata.html
>

まず作る必要があるプログラム(イメージ)が存在して
その次にVBの勉強を始め、知らないことが多すぎるのですが、
教えていただいたURL等参考にしつつ、もっと勉強させていただこうと思います。
       m(_ _)m
解決済み!

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