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

コントロールを引数にするには?

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

こんにちは。
どなたか分かる方、お答えください。よろしくお願いします。

ボタンをクリックした瞬間に、データベースに登録している内容をリストボックスに
表示させたいのですが・・・

ちなみにリストボックスの名称はLS_MESSAGEです。
ボタンのクリックイベントにDBから内容を呼び出してリストボックスに表示する関数を
書きました。
引数はリストボックス名、戻り地はDBの内容です。
関数名は紛らわしいのでここでは@@@@@@としました。
戻り値も******としました。
-------------------------------------------------------------
Private Sub ボタンのクリックイベント
  :
〜省略〜
  :
call @@@@@@(Me.LS_MESSAGE)
:
End Sub
-------------------------------------------------------------
関数は、モジュール内に記述していて、
-------------------------------------------------------------
Public Function @@@@@@(ByRef ObjList As Object)As *******
:
:
:〜省略〜
:
End Function
-------------------------------------------------------------
これで実行させると、call @@@@@@(Me.LS_MESSAGE)のところで
「アプリケーション定義またはオブジェクト定義のエラーです」というエラーが出ます。
Call @@@@@@(Me.LS_MESSAGE)のところの@@@@@@をウオッチ式に追加して
見てみると、
「@@@@@@(ByRef ObjList As Object)As *******のパラメータObjListに
対して引数が指定されていません。」
と出ました。

なにか記述が足りないと思っていろいろ試行錯誤していますが、
いっこうに解決しそうにないので、質問することにしました。

解決方法が分かる方、よろしくお願いします。
> Public Function @@@@@@(ByRef ObjList As Object)As *******

Public Function @@@@@@(ByRef ObjList As Listbox)As *******

に変更してみてはどうでしょうか?
■No7906に返信(medakaさんの記事)
>>Public Function @@@@@@(ByRef ObjList As Object)As *******
>
> Public Function @@@@@@(ByRef ObjList As Listbox)As *******
>
> に変更してみてはどうでしょうか?

アドバイスありがとうございます♪
さっそく、
Public Function @@@@@@(ByRef ObjList As Listbox)As *******
に変更しましたが、同じように
「アプリケーション定義またはオブジェクト定義のエラーです」が表示されてしまいました。
 
もしかして!!と思って、ListBoxの型がSystem.Windows.Forms.ListBoxなので
Public Function @@@@@@(ByRef ObjList
As System.Windows.Forms.ListBox)As *******
に変更したんですけど、これもまたエラーでした。
■No7908に返信(にこるさんの記事)
> さっそく、
> Public Function @@@@@@(ByRef ObjList As Listbox)As *******
> に変更しましたが、同じように
> 「アプリケーション定義またはオブジェクト定義のエラーです」が表示されてしまいました。

Me.LS_MESSAGE の Me ってちゃんとオブジェクトしてとれてます?
それと、LS_MESSAGEがクラスの中のフィールドとして存在しているかどうか、かな。
みなさんこんにちは。

すいません。ちょっと内容が理解できないのですが...
質問の内容がちょっとわからないのと、
なぜ画面内のコントロールを引数にする必要があるのでしょうか?

> ボタンのクリックイベントにDBから内容を呼び出してリストボックスに表示する

のであれば、クリックイベントでDBから値を取得して、
リストボックスに表示させれば済むことで、
関数を呼ぶ意図、そしてその関数の引数にリストボックスのコントロールを渡す
理由がわかりません。。

それと、DBとのやり取りの結果を、どのように取得していますか??

あと、VB.netなら、Call ○○ってしなくても、
me.○○で呼べますよ。
例えば 関数の戻り値をListBoxにすれば
ListBoxのセットも関数内に閉じ込められますので
ListBox1=class1.getSyainCode
みたいに呼び出すほうはシンプルにかけますよね

複数アプリから頻繁に呼び出すような場合ですと呼び出す側のコードが
すっきりできるからじゃないでしょうか?
2004/12/07(Tue) 18:12:21 編集(投稿者)

// 誤字を修正しました。

■No7921に返信(medakaさんの記事)
> 呼び出すほうはシンプルにかけますよね
> 複数アプリから頻繁に呼び出すような場合ですと呼び出す側のコードが
> すっきりできるからじゃないでしょうか?

いいえ。
こういうコードの簡素化は、良くないのではないでしょうか?

ビジネスロジックを、非Formクラスでやるのは推奨しますけど。
GUIの処理は、そのコントロールが属する Form でやるべきかと。
でなければ、スパゲティソースになりますよ。

Form もクラスですから、クラスのメンバとなるコントロールが、
外へ出されている状態になってしまいます。
個人的に、そういう方法は OOP に反すると思います。

 「そのコントロールに属する Form 内のメソッドでやるのなら、コントロールを渡す必要がない」

というコトを、SHさんは言いたかったのでは?
と以下を見るに推測しました。



■No7912に返信(SHさんの記事)
> なぜ画面内のコントロールを引数にする必要があるのでしょうか?
→ この「画面内」がポイント。

> あと、VB.netなら、Call ○○ってしなくても、
> me.○○で呼べますよ。
→ これも、わざわざ「Me」と書いて頂いているのがポイント。

違ってましたら申し訳ないです > SHさん
みなさん、こんばんわ。

言葉足らずの書き込み、申し訳ありませんでした。
java.lang.Nullpoさん補足していただいてありがとうございます。

意図していた内容は、
java.lang.Nullpoさんの書き込みがすべてです。

例えば、取得結果をListBox以外のコントロールに表示したくなった場合など、
コントロール毎に関数を作るのも大変かなぁ。と。

DBからデータを取得するのみ部分を外出しする事は、
画面と切り離して考えられると思うのですが、
それを画面内のコントロールに表示する。というような処理は、
やはり画面内で行うのが良いかなぁと思います。

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