0

3 つのフォームがあり、それぞれに独自のグリッドがあります。次のコードは、現在 form1 に記述されていますが、3 つのフォームすべてで使用されています。動作しますが、異なるデータベースを使用し、異なる列を含む 3 つのフォームで動作する必要があるため、非常に面倒で時間がかかります。以下のコードを 3 つの個別の関数に分割し、その特定のフォームに必要なデータのみを含む各フォームの背面に配置する方が適切であると考えられますか?

Public Class Form1

Public sFilter as string
Public sQuery as string


Public Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load    

Public Sub buildFilter(ByVal form as string)
  select case form 
    Case "form1"
    sFilter = "control_no > 0 and control_no < 10000" 
    Case "form2"
    sFilter = "quantity > 0 and quantity < 7849"
    Case "form3"
    sFilter = "store_id > 10000"
  end select
End Sub

Public Sub buildQuery(form)
  Select case form
    Case "form1"
    sQuery = "Select * FROM dataBase1 WHERE " & sFilter 
    Case "form2"
    sQuery = "Select quantity, first_name, last_name FROM database2 WHERE " & sFilter
    Case "form3"
    sQuery = "Select * FROM dataBase3 WHERE " & sFilter
  End Select
End Sub


End  Class

上記のコードを取得して各フォームの背面に配置し、そのフォームでのみ機能させるのが最善であると言われました。それは最善のアプローチではないように感じますが、現在のセットアップの方法も良くないと感じています。良いアプローチは何でしょうか?

4

2 に答える 2

1

そのすべてのコードを3つの形式で持つ意味はありません。

1つのオプションは、既存のコードで1つのフォームを使用し、使用している接続に応じてフォームのプロパティを設定することです。

3つのフォームのデザインが異なり、異なるデータベースに接続している場合は、クエリとフィルターコードの3つの異なるセットを持つ3つの異なるフォームを使用しないのはなぜですか?

補足:パラメータ化されたクエリも確認する必要があります

于 2012-07-16T15:33:29.000 に答える
1

これらのメソッドを共通の継承フォームに構築し、それを他のフォームに継承します。

Public MustInherit Class MyInheritedForm
    Inherits System.Windows.Forms.Form

    Public sFilter as string
    Public sQuery as string


    Public Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load    

    Public Sub buildFilter(ByVal form as string)
      select case form 
        Case "form1"
        sFilter = "control_no > 0 and control_no < 10000" 
        Case "form2"
        sFilter = "quantity > 0 and quantity < 7849"
        Case "form3"
        sFilter = "store_id > 10000"
      end select
    End Sub

    Public Sub buildQuery(form)
      Select case form
        Case "form1"
        sQuery = "Select * FROM dataBase1 WHERE " & sFilter 
        Case "form2"
        sQuery = "Select quantity, first_name, last_name FROM database2 WHERE " & sFilter
        Case "form3"
        sQuery = "Select * FROM dataBase3 WHERE " & sFilter
      End Select
    End Sub


End  Class

次に、必要なのは次のとおりです。

Public Class Form1
    Inherits MyInheritedForm


End Class

そして、あなたのメソッドは継承と一緒に来ます。

于 2012-07-16T15:36:29.387 に答える