tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: 単純にこうすればいいんですね
投稿日: 2007/08/01(Wed) 19:09
投稿者ビケ
一生懸命頑張っている様なので、私から余計なお世話をさせて頂きます。
この場合、遅延バインディング(fom をForm型でなくObjectとして宣言)を選択するべきではありません。何故なら、

1.Visual Studioの入力支援機能、メンバ一覧が表示されない
 →正確な型を指定した場合は、その型のメンバ一覧が表示されますが、Object型では、Object型が持つメンバ一覧しか表示されません。(メンバ一覧=オブジェクト(クラス)名を入力したあと「.」を入力すると自動的にメンバの一覧が表示される機能)

2.実行時にしかそのメソッドが存在するかわからない
 →例えば、Form2にButtun_Clickメソッドがあって、Form3にButtun_Clickメソッドを入れ忘れたとします。この場合、ビルドする事は可能ですが、実行後、Form3のButtun_Clickメソッドを呼び出そうとした時に初めて、そんなメソッド無いよとエラーになります。つまり、コーディングミスに気づくのは、実行して見て初めてわかるという事になります。作業効率の低下とミスを見逃す確立を上げる事になります。

上記等のリスクを覚悟した上で、それでも遅延バインディングでしか解決方法を選べないというのであれば、それはそれで現時点で的確な選択かもしれません。しかし、そうでないなら避けるべき選択案です。

この場合の適切と思われる選択案は、「案2.共通のインターフェース(Interface)を Form2 および Form3 に実装する。」です。

話は変わりますが、
>Select Case TextBox1.Text
>    Case "0" : fom = Form2
>    Case "1" : fom = Form3
>End Select
>fom.ShowDialog()

では、正しく動きませんよね?Form2とForm3はどこで、Newされるのでしょうか?また、ShowDialogすると、ボタン2はクリック出来ないと思いますが・・。説明の為にはしおったという事でしょうか?

また、この場合、ボタンのPerformClickメソッドは呼ぶべきではありません。PerformClickメソッドを呼び出すには、ボタンを公開しなければならず、クラスの特徴とも言うべきカプセル化の意味を半減させる事になるからです。ひでとさんのForm2、Form3のコーディングは、適切です。

以上、参考になれば幸いです。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。