2

Private Sub Modify()ボタンまたはラベルの動作を処理するために、フォームクラスA内にあります (両方とも同じAクラスに属しています)。これを行うとしましょう:

Private Sub Modify()
    btnFoo.Enabled = True
    lblBar.Text = "labelbar"
 End Sub

Private Sub Modify()フォーム クラス A からモジュール B に移動Public Sub Modifyし、同じボタンまたはラベルの動作を変更するために必要なすべての名前を付けると、次のようになります。

Public Sub Modify()
    A.btnFoo.Enabled = True
    A.lblBar.Text = "labelbar"
End Sub

しかし、モジュールがある種の静的要素であることを考えると、これは適切でしょうか? 適切な方法を知りたいので、良い習慣についていくことができます。

前もって感謝します。

4

2 に答える 2

1

この道をたどると、多くのフォームで多くのものを変更する多くのモジュールを持つことになります...新しい機能でプログラムを拡張したり、バグを修正したい場合は、そのコードの複雑さを嫌うでしょう。

より良いルールは次のとおりです。フォームに関するすべてのことをそのフォームで行います。

なぜ実際にそのコードをモジュールに抽出したいのですか? 多くのフォームで同じことをするからですか?このような状況では、そのようなコードを抽出することはおそらく理にかなっていますが、モジュールに特定のフォームを認識させないでください。代わりにあなたができる

Public Sub Modify(button As Button, label As Label)
    button.Enabled True
    label.Text = "labelbar"
End Sub

多くのフォームでそれを呼び出します

Private Sub ChangeElements()
    Modify(btnFoo, lblBar)
End Sub

しかし、繰り返しますが、そのようなものは Form に残しておく方がよいでしょう。

于 2013-01-22T20:36:28.070 に答える
1

モジュール、クラス、または他のオブジェクトが、そのように複数レベルの深さの別のオブジェクトのプロパティにアクセスすることは、ほとんど決して良い考えではありません。少なくとも、それはデメテルの法則に違反しています。より一般的に言えば、フォームの外部でフォームのコントロールを直接操作するのは得策ではありません。そもそもコントロールがデフォルトで公開されているのは残念だと思います。Modifyメソッドはフォームに残しておき、フォームPublicの外から呼び出す必要がある場合は作成する方がよいでしょう。

于 2013-01-22T20:34:40.073 に答える