モジュールからフォームのテキストボックス・ラベルのテキストを変更するには?

解決


CHUM  2008-04-25 01:37:02  No: 144699

VB6の場合、任意のモジュールより
Form1.label1.Text="ABCD"と、任意のラベルやテキストボックスのテキストを変更できました。

今回VB2005で同じことをしようとしたらできません。
ちなみにForm上の変更したいラベル・テキストボックスのModifiresはPublicの設定をしています。

解決策を教えてください。


特攻隊長まるるう  2008-04-25 01:56:14  No: 144700

>今回VB2005で同じことをしようとしたらできません。
できます。…だから困るのですが。

[VB6.0]でも同じですが、表示しているフォームと別のインスタンスを
作成していて、そちらに命令しているのでは?

>ちなみにForm上の変更したいラベル・テキストボックスのModifiresはPublicの設定をしています。
綴りが違いますが。。。
同一プロジェクト内なら、デフォルトの Friend のままで問題ありません。


HTML-M  2008-04-25 02:05:07  No: 144701

実行時エラーですか?


CHUM  2008-04-25 03:30:57  No: 144702

ありがとうございます。
症状としては、任意のモジュール内でForm1.label1.Text="ABCD"の記述のあと
Form1.showと記述すれば、もう一枚Fom1が表示されその新しいFormには
Form1.label1.Text="ABCD"が反映されている。という感じです。

VB6のとき、クラスやインスタンスといった単語・手法?は特に気にせず
やっておりました。
暗黙のインスタンスという単語をもとに自分なりに調べています。

オブジェクト指向ですか?を理解しているプログラムをしたい。
まだ自分はそのレベルにありません。


特攻隊長まるるう  2008-04-25 04:05:20  No: 144703

>症状としては、任意のモジュール内でForm1.label1.Text="ABCD"の記述のあと
>Form1.showと記述すれば、もう一枚Fom1が表示されその新しいFormには
つまり、後から表示されてるのが暗黙のインスタンスとして VB が用意した
Form1 ってことですよね?
最初に表示されている Form1 が明示的に New してたりするんじゃないの?

とりあえず新規プロジェクトで Form1 をスタートアップオブジェクトに
してあれば、問題なく実行できるはずです。そこから何をどう変更したかは
こちらでは把握できないことです。


癒耶  2008-04-25 10:38:23  No: 144704

同じForm1であれば変更が反映されるはずですが・・・
一番単純な形で以下のようにしてもちゃんと反映されているはずです。
Dim frm1 As New Form1
With frm1
    .label1.Text = "ABCD"
    .Show()
End With
Form1呼び出し部分のコードを少しだけでも書いて頂けると
こちらも説明しやすくなると思いますよ。


CHUM  2008-04-25 19:13:30  No: 144705

皆さんありがとうございます。
構成は次のとおりです。  
Form1をスタートアップのFromにしている。
Form1内のボタンクリックでFrom4をshow
そのForm4内のラベル・テキストボックスをモジュールより書き換え。

【改善前】
Form1にて
Dim NewForm As New Form4
Form4.ShowDialog()

モジュールにて
Form4.label1.Text = "ABCD"
モジュールでは特にForm4に対しては宣言無し

【改善後??】
Form1にて
Form4.ShowDialog()

モジュールにて
Form4.label1.Text = "ABCD"
モジュールでは特にForm4に対しては宣言無し

で書き換えることができるようになりました。

この一連の動作に関して詳しく説明していただけないでしょうか??
お願いいたします。


CHUM  2008-04-25 19:15:14  No: 144706

皆さんありがとうございます。
構成は次のとおりです。  
Form1をスタートアップのFromにしている。
Form1内のボタンクリックでFrom4をshow
そのForm4内のラベル・テキストボックスをモジュールより書き換え。

【改善前】
Form1にて
Dim NewForm As New Form4
Form4.ShowDialog()

誤字・間違いが多数ありましたすいません。。

皆さんありがとうございます。
構成は次のとおりです。  
Form1をスタートアップのFormにしている。
Form1内のボタンクリックでForm4をshow
そのForm4内のラベル・テキストボックスをモジュールより書き換え。

【改善前】
Form1にて
Dim NewForm As New Form4
NewForm.ShowDialog()


アクア  URL  2008-04-25 20:10:37  No: 144707

アクアと申します。よろしくお願い致します。

> そのForm4内のラベル・テキストボックスをモジュールより書き換え。
ここのモジュールって何を指してます?
意味がよく伝わらないのですが…


CHUM  2008-04-25 23:16:22  No: 144708

モジュールですか??
コンポーネントの追加で追加できるテンプレートにそんざいするモジュールですが。
これ以上は特に・・・

複数Formで行う同一処理(Function)を書き込んでいます。


特攻隊長まるるう  2008-04-26 00:04:06  No: 144709

>コンポーネントの追加で追加できるテンプレートにそんざいするモジュールですが。
まぁ、概ねそれでいいと思います。今回の問題の直接的な原因ではないので。

コード上で Module 〜 End Module という Module ステートメントで区切られた
モジュール ブロックのことですね。話の流れによってはもうちょっと汎用的な
使われ方をする言葉なので、具体的に質問したい時は『Module 〜 End Module 
内で』とか言ってくれた方がいいです。
[モジュールとは]
http://e-words.jp/w/E383A2E382B8E383A5E383BCE383AB.html

> この一連の動作に関して詳しく説明していただけないでしょうか??
その時点でダメだしします。改善したんですよね?何を根拠に改善したのですか?
適当に変えたら動いた?…なら話になりません。
逆に何らかの根拠があったなら、説明の丸投げは手を抜きすぎだと思います。


特攻隊長まるるう  2008-04-26 00:45:55  No: 144710

といいつつも既に半分ぐらい説明してるし、今更詳しくも何も無いんだけど、
ShowDialog してる方は参照変数を用意し、New を使って明示的にインスタンス
を生成しています。

ラベルを変更する側はフォーム名を直接指定しているので、VBが用意した
インスタンスを利用してます。

モジュールかどうかは関係ないですね。Form1 内にコードを書いても同じです。
明示的なのと暗黙のと2つ作ってます。


CHUM  2008-04-26 02:08:13  No: 144711

>特攻隊長まるるうさん
  厳しいお言葉ありがとうございます。
  なるほど。自分で明示的に宣言しておきならが、暗黙のインスタンスを利用していたのが原因なんですね。。
  わかりました。

  ありがとうございました。


YuO  2008-04-26 14:06:21  No: 144712

> 自分で明示的に宣言しておきならが、暗黙のインスタンスを利用していたのが原因なんですね。。

たぶん,そのあたりが特攻隊長まるるうさんの言う

> できます。…だから困るのですが。

だと思います。
VB 2005 βとかの頃に問題視されてはいたのですが……。

というわけで,さっくり暗黙のインスタンスの利用を禁止する方法があったので,URIを記載しておきます。

じゃんぬねっと日誌 http://blogs.wankuma.com/jeanne/
 - VB2005 で「Form の既定のインスタンス」と My の使用を防ぐには? http://blogs.wankuma.com/jeanne/archive/2006/10/26/42540.aspx
  - 2007/02/20 17:35 すけけんさんのコメント http://blogs.wankuma.com/jeanne/archive/2006/10/26/42540.aspx#63263
  - 2007/02/21 9:52 すけけんさんのコメント http://blogs.wankuma.com/jeanne/archive/2006/10/26/42540.aspx#63387


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加