2016-06-13 2 views
0

Я занимаюсь этим приложением некоторое время, и теперь я хочу вызвать метод из основной формы и включить его в другую форму, чтобы он запускал то, что я хочу. В моей основной форме это метод, который у меня есть:Вызвать метод из другой формы vb.net

Public Sub MostrarResultadoTotal() 
    SQLCon = New SqlConnection 
    SQLCon.ConnectionString = "......" 
    Try 
     SQLCon.Open() 
     Query = "SELECT 
       CAST(SUM(CAST(Filesize as float))/1024/1024 AS DECIMAL(10,2)) 
       FROM infofile" 
     SqlCmd = New SqlCommand(Query, SQLCon) 
     SqlDR = SqlCmd.ExecuteReader 
     If SqlDR.Read() Then 
      If SqlDR.IsDBNull(0) Then 
       lblResultadoTotal.Text = "0,00" 
      Else 
       lblResultadoTotal.Text = SqlDR.GetDecimal(0) 
      End If 
     End If 
     SQLCon.Close() 
    Catch ex As SqlException 
     MsgBox(ex.Message) 
    Finally 
     SQLCon.Dispose() 
    End Try 
End Sub 

И я хочу называть это кнопкой удаления. У вас есть идеи, как я могу решить свою проблему?

Это метод:

'Mudar a cor das labels dependendos to tamanho total 
    Sub ChangeLabelColor() 
     If lblResultadoTotal.Text <= 3.9 Then 
      lblResultadoTotal.ForeColor = Color.Green 
      lblGB.ForeColor = Color.Green 
     ElseIf (lblResultadoTotal.Text >= 4) And (lblResultadoTotal.Text <= 6.9) Then 
      lblResultadoTotal.ForeColor = Color.Orange 
      lblGB.ForeColor = Color.Orange 
     ElseIf lblResultadoTotal.Text >= 7 Then 
      lblResultadoTotal.ForeColor = Color.Red 
      lblGB.ForeColor = Color.Red 
     End If 
+2

сделать что-то 'Shared' всегда самое худшее из возможных решений - вы бы будьте осторожны, чтобы передавать экземпляры вокруг - и использовать их. Это называется «ООП». – specializt

+0

Несвязанный: вам может быть интересно узнать о ['Using'] (https://msdn.microsoft.com/en-us/library/htd05whh.aspx) - это сокращение для попытки /, наконец, у вас есть, и может помочь читаемость. –

+0

«Все это всегда самое худшее решение». Я бы не хотел сказать, что это не так. Как вы проходите метод/функцию? Пожалуйста, объясните ... Кроме того, если у него есть экземпляр класса, ему не нужен общий ... В другой заметке сделайте его функцией в отдельном классе и вызовите его, когда вам нужно ... – Codexer

ответ

2

В этом случае, ваш метод содержит логику доступа к данным, которые должны быть отделены от пользовательского интерфейса слоя логики (формы). Он должен быть в отдельном классе, который затем вызывается обеими формами.

Friend Class DataAccess 
    Public Function MostrarResultadoTotal() As String 
     SQLCon = New SqlConnection 
     SQLCon.ConnectionString = "......" 
     Try 
      SQLCon.Open() 
      Query = "SELECT 
        CAST(SUM(CAST(Filesize as float))/1024/1024 AS DECIMAL(10,2)) 
        FROM infofile" 
      SqlCmd = New SqlCommand(Query, SQLCon) 
      SqlDR = SqlCmd.ExecuteReader 
      If SqlDR.Read() Then 
       If SqlDR.IsDBNull(0) Then 
        Return "0,00" 
       Else 
        Return SqlDR.GetDecimal(0) 
       End If 
      End If 

     Catch ex As SqlException 
      MsgBox(ex.Message) 
     Finally 
      ' Always close connection 
      SQLCon.Close() 
      SQLCon.Dispose() 
     End Try 
    End Function 
End Class 

Тогда от вас формы, просто объявить экземпляр вашей логики доступа к дате:

Dim dataAccess = New DataAccess(); 

И называют это:

lblResultadoTotal.Text = dataAccess.MostrarResultadoTotal() 

для вашего цвета этикетки

Изменение цвета ярлыков - это логика пользовательского интерфейса, и из вашего примера это также может использоваться повторно. Таким образом, вы должны рассмотреть вопрос о создании нового класса для управления общей логики интерфейса:

Friend Class CommonUILogic 

    Function GetLabelColor(value As Integer) As Color 
     If value <= 3.9 Then 
      Return Color.Green 
     ElseIf (value >= 4) And (value <= 6.9) Then 
      Return Color.Orange 
     ElseIf value >= 7 Then 
      Return Color.Red 
     End If 
    End Function 

End Class 

Тогда вы можете назвать это таким образом:

Dim uiLogic = New CommonUILogic() 

Dim labelColor = uiLogic.GetLabelColor(Integer.Parse(lblResultadoTotal.Text)) 

lblResultadoTotal.ForeColor = labelColor 
lblGB.ForeColor = labelColor 
+0

Итак, в этом случае у меня есть метки. Я должен скопировать/вставить весь метод, который у меня есть для класса? –

+0

@Miggs создайте отдельный класс, вставьте в него свой метод и сделайте его «Shared». Тогда вы можете это назвать :) – Codexer

+0

Предлагая разделение слоев - это расширенная тема. Подумайте о добавлении конкретного примера кода и/или ссылок на соответствующие статьи. – Neolisk

Смежные вопросы