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

フォームについて

  • 題名: フォームについて
  • 著者: こう
  • 日時: 2004/09/22 11:29:00
  • ID: 6271
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[Win 2000 Pro]
分類:[.NET]

こんにちは、.NETプログラミングにおいて
わからないところがあるので教えて下さい。

フォーム関連についてなんですが
まず例えばForm1,Form2,Form3,Moudel1があるとします
Form1には二つのボタンがあり一つを押せばForm2が表示、二つ目を押せばForm3が表示
としたくてMoudel1に

Moudel1
public SubForm AS Form

Sub S1()
SubForm = New Form2
SubForm.TextBox1.text = "Form2"
SubForm.Show
End

Sub S2()
SubForm = New Form3
SubForm.TextBox1.text = "Form3"
SubForm.Show
END

END Module

後はForm1のボタンそれぞれにS1とS2を割り当てて実行します
するとS1、S2ともSubForm.textBox1.text = 〜 の部分でエラーとなります。
しかしSubForm.textBox1.text = 〜の部分を消し実行するとエラーはなくなり
きちんとForm2ともForm3とも表示されます.どうやったら解決するでしょうか?
わかる方よろしくお願い致します。
■No6271に返信(こうさんの記事)
> Moudel1
> public SubForm AS Form
>
> Sub S1()
> SubForm = New Form2
> SubForm.TextBox1.text = "Form2"
> SubForm.Show
> End
>
> Sub S2()
> SubForm = New Form3
> SubForm.TextBox1.text = "Form3"
> SubForm.Show
> END
>
> END Module

このままだと、コンパイルエラーになると思うのですが。
Sub 〜 END の 「END」ってEnd Subのことで良いですか?


さて、

> Public SubForm As Form

と定義しているのですから、

> SubForm = New Form2
> SubForm = New Form3

としても、SubFormはあくまでSystem.Windows.Forms.Formという型であって、
Form2、Form3という型に明示化されておりません。

ですので、Form2またはForm3に属するコントロールにアクセスできないのは、当たり前なのです。

これは実生活でも同じです。
「外国」という抽象化された言葉で、「ニューヨーク」というメンバ(都市)を含んだ国は「すべての外国」にありますか?

どのFormなのかわかんないのに、そのFormクラスに属するメンバにアクセスすることは、フツーはできません。
これはメソッドやプロパティでも同様だし、クラスの概念のひとつだと思うのですが。

全く同じといって良い話が以下にあります。
http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=6132&rev=&no=0
お返事ありがとうございます java.lang.Nullpoさんにはいつも世話になります
感謝です。

>Sub 〜 END の 「END」ってEnd Subのことで良いですか?
すいません 間違ってました。 End Sub です。

実はこれはある6.0のプログラムを.NETへアップグレードした時におきた問題だったんです。 6.0ではForm型でよかったと思うのですが、.NETではうまくいかないんですね。
勉強になりました。 自分でもForm型で宣言してたのをForm2やForm3で宣言すると片方
はうまくいきした。 やはり解決方法としてはSubFormと例えばSubForm1のように二つ型を作成してそれぞれ public SubForm as Form2 public Subform1 as Form3
とするしかないのでしょうか? そこのあたり何かわかれば教えて下さい。
本当にいつもお世話になります。
■No6274に返信(こうさんの記事)
> お返事ありがとうございます java.lang.Nullpoさんにはいつも世話になります
> 感謝です。
いえ、微力ながらお役に立てれば嬉しいです。

> 実はこれはある6.0のプログラムを.NETへアップグレードした時におきた問題だったんです。
> 6.0ではForm型でよかったと思うのですが、.NETではうまくいかないんですね。
> 勉強になりました。
> 自分でもForm型で宣言してたのをForm2やForm3で宣言すると片方はうまくいきました。
> やはり解決方法としてはSubFormと例えばSubForm1のように二つ型を作成してそれぞれ> public SubForm as Form2 public Subform1 as Form3
> とするしかないのでしょうか?
> そこのあたり何かわかれば教えて下さい。
> 本当にいつもお世話になります。

そうくると思って、

> > 全く同じといって良い話が以下にあります。
> > http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=6132&rev=&no=0

とリンクを張っておいたのですよ。(目は通されましたか?)
最後に、深山さまが説明されている部分を参照してください。
とても丁寧に書かれてらっしゃいますので、わかりやすいです。

ただし、

> public SubForm as Form2 public Subform1 as Form3
> とするしかないのでしょうか?

と、こうさん自身の方法が素直だし、何かと問題も起きないでしょう。
私自身もあまり遅延バインディングはお勧めしません。
せっかくのオブジェクト指向なのですから。
  • 題名: Re[4]: フォームについて
  • 著者: こう
  • 日時: 2004/09/22 14:24:10
  • ID: 6280
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
ありがとうございます
深山さんの記事は見てやってみたけど最初は出来なかったんだけどjava.lang.Nullpo
さんの指摘の後もう一度よく見てみたところそこ以外の個所のエラーでうまくいってい
ないことが判明しました。でもやはりオブジェクト指向を考えるともうひとつ変数を
作った方がいいようですね。 ほんとうにありがとうございます。
わが師匠ながらあっぱれです。またよろしくお願いします。
こう
解決済み!

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