タイトル : Re^2: 単純にこうすればいいんですね 投稿日 : 2007/08/02(Thu) 15:41 投稿者 : ひでと
ありがとうございます。 > 一生懸命頑張っている様なので、私から余計なお世話をさせて頂きます。 > この場合、遅延バインディング(fom をForm型でなくObjectとして宣言)を選択するべきではありません。何故なら、 > > 1.Visual Studioの入力支援機能、メンバ一覧が表示されない > →正確な型を指定した場合は、その型のメンバ一覧が表示されますが、Object型では、Object型が持つメンバ一覧しか表示されません。(メンバ一覧=オブジェクト(クラス)名を入力したあと「.」を入力すると自動的にメンバの一覧が表示される機能) > > 2.実行時にしかそのメソッドが存在するかわからない > →例えば、Form2にButtun_Clickメソッドがあって、Form3にButtun_Clickメソッドを入れ忘れたとします。この場合、ビルドする事は可能ですが、実行後、Form3のButtun_Clickメソッドを呼び出そうとした時に初めて、そんなメソッド無いよとエラーになります。つまり、コーディングミスに気づくのは、実行して見て初めてわかるという事になります。作業効率の低下とミスを見逃す確立を上げる事になります。 > > 上記等のリスクを覚悟した上で、それでも遅延バインディングでしか解決方法を選べないというのであれば、それはそれで現時点で的確な選択かもしれません。しかし、そうでないなら避けるべき選択案です。 耳の痛いところですが、現状の私のレベルではこれが精一杯というところでした。 確かに、別の人が見たら顔をしかめますよね。 今製作しているのは、私の会社(零細の三ちゃん経営)用のプログラムで、 曲がりなりにもプログラムできるのは私一人しかいないんです。 それで、まあ自分だけ理解できれば...ということでした。 > > この場合の適切と思われる選択案は、「案2.共通のインターフェース(Interface)を Form2 および Form3 に実装する。」です。 Interface についても見たのですが、全く解らなかったのです。 教えていただくには、私のレベルが低すぎると思い、手を出せませんでした。 > > 話は変わりますが、 > >Select Case TextBox1.Text > > Case "0" : fom = Form2 > > Case "1" : fom = Form3 > >End Select > >fom.ShowDialog() > > では、正しく動きませんよね?Form2とForm3はどこで、Newされるのでしょうか?また、ShowDialogすると、ボタン2はクリック出来ないと思いますが・・。説明の為にはしおったという事でしょうか? かなり大きなプログラムになってしまったので、あるていどはしょっていますが クラスの宣言部分で Dim fom しています。 また、Form2とForm3はクラスを作ったわけではなく、Formを挿入して自動でできたものです。 Form2.vbになっているので、Newしなくても呼びだせると思いますが、 間違って理解しているでしょうか? > > また、この場合、ボタンのPerformClickメソッドは呼ぶべきではありません。PerformClickメソッドを呼び出すには、ボタンを公開しなければならず、クラスの特徴とも言うべきカプセル化の意味を半減させる事になるからです。ひでとさんのForm2、Form3のコーディングは、適切です。 > > 以上、参考になれば幸いです。 ありがとうございます。あたって砕けろの気持ちで試行錯誤しながら作っています。 また、変なことをお聞きすることがあると思いますが、これからもよろしくお願いします。 |