Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202

    [Vb.NET] implementazione label in form

    Ciao a tutti,

    Mi sono ritrovato in una problematica, sicuramente comune a voi ma che io sto iniziando ad affrontare oggi.
    Al fine di diminuire la qta di codice rendendolo più manutenibile, ho iniziato a centralizzare la creare di una particolare label + progress bar che viene di fatto utilizzata in tutte le mie form.

    In particolare questa label era inizialmente presente in tutte le form e quando c'era da modificare qualcosa ovviamente impazzivo, e altri problemi connessi.

    Il mio oggetto (Pausa) implemente semplicemente le funzioni CRUD, ed infine ho aggiunto queste funzioni.
    codice:
    Public Sub prepareLabelAndStatusBar(ByRef frm As Form)
            Dim lblPausa As New Label
            lblPausa.Name = "lblPausa"
            lblPausa.Size = New System.Drawing.Size(670, 360) 'set your size (if required)
            frm.Controls.Add(lblPausa)  'add your new control to your forms control collection
            lblPausa.Location = New System.Drawing.Point((lblPausa.Parent.Width \ 2) - (lblPausa.Width \ 2), (lblPausa.Parent.Height \ 2) - (lblPausa.Height \ 2) + 360) 'set your location
    
        End Sub
    
        Public Sub updateTextLblPausa(ByRef frm As Form, ByVal txt As String)
            Dim lblPausa As Label = frm.Controls.Find("lblPausa", True).FirstOrDefault()
            lblPausa.Text = txt
        End Sub
    
        Public Function isVisible(ByRef frm As Form) As Boolean
            Dim lblPausa As Label = frm.Controls.Find("lblPausa", True).FirstOrDefault()
            Return lblPausa.Visible
        End Function
        Public Sub showPausa(ByRef frm As Form)
            Dim lblPausa As Label = frm.Controls.Find("lblPausa", True).FirstOrDefault()
            lblPausa.Visible = True
        End Sub
    
        Public Sub hidePausa(ByRef frm As Form)
            Dim lblPausa As Label = frm.Controls.Find("lblPausa", True).FirstOrDefault()
            lblPausa.Visible = False
        End Sub
    Nel load della form faccio il mio prepare che mi genera la label.
    E poi vado ad utilizzare tutte le mie funzioni, passando il form chiamante come riferimento.

    Sicuramente ho dei vantaggi con questo trucco, ma ho anche molte perplessità e volevo appunto sentire voi cosa ne pensavato o come avresti gestito una situazione del genere.

    Ciao
    Paolo
    Che mestiere difficile.....essere da soli ancora di più

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Mi pare di capire che hai messo il codice in un modulo (vedendo che tutti i metodi sono Public non posso pensare altrimenti).
    Io avrei incapsultato tutto in una classe, a cui passare il form frm nel costruttore.

  3. #3
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Spero di aver capito.
    I metodi sono all'interno di una classe, che ora riporto.
    Di fatto mi consigli di passare il form in una proprietà della classe e non al singolo metodo?
    Ma in questo caso io dipendo da una form nella creazione della classe, sto leggendo sempre di più dove si consiglia di inserire meno dipendenze possibili quando si crea un oggetto.

    codice:
    Imports System.Data.SqlClient
    
    Public Class pausa
        'Dettaglio della pausa
        Public id As Integer
        Public idBanco As Integer
        Public ora As TimeSpan
        Public durata As Integer
        Public fatta As Boolean
        Public attiva As Boolean
    
        Public db As db
        Private lastError As String
    
        Public Function getPauseFromIdBanco(ByVal idBanco As Integer) As DataTable
            Try
                db.SQL = "SELECT * FROM banchiPause WHERE pausa_idBanco = '" & idBanco & "' "
    
                Return db.getDT("contProgDetails")
            Catch ex As Exception
                Me.lastError = ex.Message
                Return New DataTable
            End Try
        End Function
    
        Public Function loadById(ByVal id As Integer) As Boolean
            db.SQL = "SELECT * FROM banchiPause WHERE pausa_id = '" & id & "' "
            If Me.load() Then
                Return True
            End If
            Return False
        End Function
    
        Private Function load()
            Try
                Dim dt As DataTable
                dt = db.getDT("contProgDetails")
                If dt.Rows.Count <> 1 Then
                    Throw New Exception("Dettagli Programma non trovati")
                End If
    
                Me.id = dt(0)("pausa_id")
                Me.idBanco = dt(0)("pausa_idBanco")
                Me.ora = dt(0)("pausa_ora")
                Me.durata = dt(0)("pausa_durata")
                Me.fatta = False
                Me.attiva = False
    
                Return True
            Catch ex As Exception
                Me.lastError = ex.Message
                db.Disconnetti()
                Return False
            End Try
        End Function
    
        Public Function save() As Boolean
            Try
                db.SQL = "UPDATE [dbo].[banchiPause] SET " &
                             ",[pausa_idBanco] = @pausa_idBanco" &
                             ",[pausa_ora] = @pausa_ora " &
                             ",[pausa_durata] = @pausa_durata " &
                         "WHERE [pausa_id] = @pausa_id " &
                         "IF @@ROWCOUNT = 0 " &
                         "INSERT INTO [dbo].[banchiPause]" &
                             "([pausa_idBanco]" &
                             ",[pausa_ora]" &
                             ",[pausa_durata])" &
                         "VALUES" &
                             "(@pausa_idBanco2" &
                             ",@pausa_ora2" &
                             ",@pausa_durata2) "
    
                Dim parameters() As SqlParameter = New SqlParameter() _
                {
                    New SqlParameter("@pausa_idBanco", SqlDbType.Int) With {.Value = db.getValueOrDbNull(idBanco)},
                    New SqlParameter("@pausa_ora", SqlDbType.Time) With {.Value = db.getValueOrDbNull(ora)},
                    New SqlParameter("@pausa_durata", SqlDbType.Int) With {.Value = db.getValueOrDbNull(durata)},
                    New SqlParameter("@pausa_id", SqlDbType.Int) With {.Value = db.getValueOrDbNull(id)},
                    New SqlParameter("@pausa_idBanco2", SqlDbType.Int) With {.Value = db.getValueOrDbNull(idBanco)},
                    New SqlParameter("@pausa_ora2", SqlDbType.Time) With {.Value = db.getValueOrDbNull(ora)},
                    New SqlParameter("@pausa_durata2", SqlDbType.Int) With {.Value = db.getValueOrDbNull(durata)}
                }
    
                db.exeNonQueryParam(parameters)
                Return True
            Catch ex As Exception
                Me.lastError = ex.Message
                Return False
            End Try
            Return True
        End Function
    
        Public Function getLastError() As String
            Dim errStr As String = lastError
            lastError = ""
            Return errStr
        End Function
    
        Public Sub prepareLabelAndStatusBar(ByRef frm As Form)
            Dim lblPausa As New Label
            lblPausa.Name = "lblPausa"
            lblPausa.Size = New System.Drawing.Size(670, 360)
            lblPausa.Font = New Font("Microsoft Sans Serif", 48, FontStyle.Bold)
            lblPausa.BackColor = SystemColors.ActiveCaption
            lblPausa.ForeColor = Color.White
            lblPausa.TextAlign = ContentAlignment.MiddleCenter
            lblPausa.Visible = False
            lblPausa.Left = (frm.Width \ 2) - (670 \ 2)
            lblPausa.Top = (frm.Height \ 2) - (360 \ 2) - 70
            frm.Controls.Add(lblPausa)
    
            Dim pBarrPausa As New ProgressBar
            pBarrPausa.Name = "pBarrPausa"
            pBarrPausa.Width = 670
            pBarrPausa.Height = 70
            pBarrPausa.Left = (frm.Width \ 2) - (lblPausa.Width \ 2)
            pBarrPausa.Top = (frm.Height \ 2) - (lblPausa.Height \ 2) + 360 - 70
            pBarrPausa.Value = 0
            pBarrPausa.BringToFront()
            pBarrPausa.Visible = False
            frm.Controls.Add(pBarrPausa)
        End Sub
    
        Public Sub updatePausa(ByRef frm As Form, ByVal txt As String, ByVal valueProgressBar As Integer, ByVal maxValue As Integer)
            Dim lblPausa As Label = frm.Controls.Find("lblPausa", True).FirstOrDefault()
            lblPausa.Text = txt
    
            Dim pBarrPausa As ProgressBar = frm.Controls.Find("pBarrPausa", True).FirstOrDefault()
            pBarrPausa.Maximum = maxValue * 60
            pBarrPausa.Value = valueProgressBar
    
        End Sub
    
        Public Function isVisible(ByRef frm As Form) As Boolean
            Dim lblPausa As Label = frm.Controls.Find("lblPausa", True).FirstOrDefault()
            Return lblPausa.Visible
        End Function
    
        Public Sub showPausa(ByRef frm As Form)
            Dim lblPausa As Label = frm.Controls.Find("lblPausa", True).FirstOrDefault()
            lblPausa.Visible = True
            lblPausa.BringToFront()
    
            Dim pBarrPausa As ProgressBar = frm.Controls.Find("pBarrPausa", True).FirstOrDefault()
            pBarrPausa.Visible = True
            pBarrPausa.BringToFront()
        End Sub
    
        Public Sub hidePausa(ByRef frm As Form)
            Dim lblPausa As Label = frm.Controls.Find("lblPausa", True).FirstOrDefault()
            lblPausa.Visible = False
    
            Dim pBarrPausa As ProgressBar = frm.Controls.Find("pBarrPausa", True).FirstOrDefault()
            pBarrPausa.Visible = False
            pBarrPausa.BringToFront()
        End Sub
    
    End Class
    Che mestiere difficile.....essere da soli ancora di più

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Non capisco quale relazione hanno i metodi che usi per gestire la Label con le operazioni sul db.
    Ma forse è un mio problema di comprensione.

  5. #5
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    infatti vista cosi non ha nessuna, relazione ma c'è.

    C'è una classe banco che carica un array di oggetti pause.
    L'oggetto banco è istanziato nella form principale percui sempre disponibile.
    C'è una logica che per ora è esclusa dalla classe pausa ed è integrata in un timer che controlla se il banco deve andare in pausa.
    Effettivamente l'obbiettivo è creare un metodo all'interno dell'oggetto pausa che viene richiamato dal timer e controlla se deve andare in pausa.
    Ma volevo fare un passo alla volta.
    Per ora mi sono limitato a creare un metodo per la display label che indica all'utente presente sul banco di andare in pausa.

    Immagino sia difficile avere una visione d'insieme, ma ho preferito descriverti tt anche per avere dei pareri su come sto procedendo.
    Almeno dirmi, no sta costruzione fa schifo, oppure ha un minimo di senso.

    Grazie mille per il tuo tempo.

    codice:
    Public Class banco
    .
    .
    .
    .
    
        Public Function loadPause()
            Dim pausa As New pausa
            pausa.db = Me.db
    
            pause.Clear()
            For Each rowProg As DataRow In pausa.getPauseFromIdBanco(Me.id).Rows
                pausa = New pausa
                pausa.db = Me.db
                If (pausa.loadById(rowProg("pausa_id"))) Then
                    Me.pause.Add(pausa.id, pausa)
                Else
                    Return False
                End If
            Next
            Return True
    End Class
    Che mestiere difficile.....essere da soli ancora di più

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.