- PR -

呼び出し元コントロールのラベル表示内容を変更

1
投稿者投稿内容
たろー
会議室デビュー日: 2007/04/12
投稿数: 3
投稿日時: 2007-04-12 18:20
たろーと申します。
VB2005で開発を行っていますが、VB初心者の為以下の点で苦戦しております。

Formからクラスを呼び出し、そのクラス内のメソッド処理中に
呼び出し元Formのラベル表示内容を変更したいのですがうまくいきません。
Formや変更したいラベルのインスタンスをクラスに引数として渡そうともしましたが、
記述方法が悪いのかエラーとなります。
お手数だと思いますが、解決方法をご存知でしたらご教授頂きたいと思います。

【動作環境】
Microsoft Windows XP Professional
Microsoft Visula Basic 2005

【内容】
Public class FormHoge

Private Function MeinHoge()

・
・
Dim SubClass As New サブクラスhoge
SubClass.SubHoge()
・
・
end function

end Class

Public class サブクラスhoge

Private Function SubHoge()
Dim a as string
Dim countA as integer
Dim countB as integer

Do Until a = hoge

処理A
countA = countA + 1
処理B
countB = countB + 1

↓ここで呼び出し元Formのラベル値を更新したい
【VB6なら】
FormHoge.lblCount.Caption = countA
FormHoge.lblCount2.Caption = countB
↑
Loop
end function

end Class
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-04-12 23:33
引用:

たろーさんの書き込み (2007-04-12 18:20) より:

Formからクラスを呼び出し、そのクラス内のメソッド処理中に呼び出し元Formのラベル表示内容を変更したいのですがうまくいきません。


「呼び出し先」 は 「呼び出し元」 を意識しないようにするのが古くからの定石です。
よって、この考え方自体に問題あると言えるでしょう。
過去にも何度かこういった話題があがっているので、検索してみると良いでしょう。

とはいえ、回答はします。

引用:

Formや変更したいラベルのインスタンスをクラスに引数として渡そうともしましたが、
記述方法が悪いのかエラーとなります。


それでうまくいくハズですが、提示して頂いたソースにはそれらしい記述はありませんね。

引用:

Private Function MeinHoge()


Main ですよね。

引用:

↓ここで呼び出し元Formのラベル値を更新したい
【VB6なら】
FormHoge.lblCount.Caption = countA
FormHoge.lblCount2.Caption = countB
↑


VB2005 の場合 'も' VB6 と同じく 「既定のインスタンス」 が作られるのでできてしまうハズです。
ただ、Caption プロパティが Text プロパティに変わるだけですね。
どうも、インスタンスが同一でないと思われます。

# countA と countB は Integer 型なのですから... なんて無粋な突っ込みはやめておきます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
たろー
会議室デビュー日: 2007/04/12
投稿数: 3
投稿日時: 2007-04-13 14:35
稚拙な説明ですいません。ほんとに初心者なもので・・・。

引用:
--------------------------------------------------------------------------------


Formや変更したいラベルのインスタンスをクラスに引数として渡そうともしましたが、
記述方法が悪いのかエラーとなります。

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


それでうまくいくハズですが、提示して頂いたソースにはそれらしい記述はありませんね。
--------------------------------------------------------------------------------

一応私が試した方法としては・・・。
【メイン】
Dim SubClass As New サブクラスhoge
SubClass.SubHoge(Me.Label1)
【クラス】
Private Function SubHoge(ByRef lbl As System.Windows.Forms.Label))
Dim a as string
Dim countA as integer
Do Until a = hoge
 処理A
 countA = countA + 1
 lbl.text = countA.Tostring
Loop
end function

でもうまくいきませんでした。
記述に誤りがあるのでしょうか?
それともVB6でいうDoEventsのような処理がいるのでしょうか?

上記を含め、質問で記載したプログラムは掲載用に別途テキストで記述したので、
ソース内容に誤りがあるかもしれませんがお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-04-13 14:42
引用:

たろーさんの書き込み (2007-04-13 14:35) より:

記述に誤りがあるのでしょうか?


望ましいかどうかは別として "記述の誤り" はないと思います。

引用:

それともVB6でいうDoEventsのような処理がいるのでしょうか?


描画しないような状態であれば必要ですね。
それと DoEvents は再描画するためのものではありません。
描画したいだけならば、Refresh (Invalidate + Update) でしょう。

引用:

上記を含め、質問で記載したプログラムは掲載用に別途テキストで記述したので、
ソース内容に誤りがあるかもしれませんがお願いします。


それを聞くと不安になります。
(質問内容 "自体" に誤りがないことが前提だと思いますから)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
たろー
会議室デビュー日: 2007/04/12
投稿数: 3
投稿日時: 2007-04-13 15:24
解決しました。ありがとうございました。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-04-13 16:37
これで、

無視リスト.Add();

だな。
1

スキルアップ/キャリアアップ(JOB@IT)