- - PR -
呼び出し元コントロールのラベル表示内容を変更
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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 | ||||||||||||||||
|
投稿日時: 2007-04-12 23:33
「呼び出し先」 は 「呼び出し元」 を意識しないようにするのが古くからの定石です。 よって、この考え方自体に問題あると言えるでしょう。 過去にも何度かこういった話題があがっているので、検索してみると良いでしょう。 とはいえ、回答はします。
それでうまくいくハズですが、提示して頂いたソースにはそれらしい記述はありませんね。
Main ですよね。
VB2005 の場合 'も' VB6 と同じく 「既定のインスタンス」 が作られるのでできてしまうハズです。 ただ、Caption プロパティが Text プロパティに変わるだけですね。 どうも、インスタンスが同一でないと思われます。 # countA と countB は Integer 型なのですから... なんて無粋な突っ込みはやめておきます。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 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のような処理がいるのでしょうか? 上記を含め、質問で記載したプログラムは掲載用に別途テキストで記述したので、 ソース内容に誤りがあるかもしれませんがお願いします。 | ||||||||||||||||
|
投稿日時: 2007-04-13 14:42
望ましいかどうかは別として "記述の誤り" はないと思います。
描画しないような状態であれば必要ですね。 それと DoEvents は再描画するためのものではありません。 描画したいだけならば、Refresh (Invalidate + Update) でしょう。
それを聞くと不安になります。 (質問内容 "自体" に誤りがないことが前提だと思いますから) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2007-04-13 15:24
解決しました。ありがとうございました。
| ||||||||||||||||
|
投稿日時: 2007-04-13 16:37
これで、
無視リスト.Add(); だな。 |
1