+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 10 su 10

Unica funzione per due form uguali

  1. #1
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Buongiorno.
    Non riesco a trovare il giusto modo per fare ciò che ora descrivo, semplificando.
    Ho due form, Form1 e Form2, quasi uguali riguardo ai controlli ospitati sia per numero, sia per nome; controlli che devono essere valorizzati prendendo i dati con la medesima query. Vorrei codificare quindi un'unica funzione alla quale passare il riferimento al form dal quale avviene la chiamata (cioè Me). Esempio:
    Da Form 1 e da Form2
    PopolaForm(Me)
    
    Separatamente
        Private f as Object
    
        Public Sub PopolaForm(ByRef oForm as Form)
                   If oForm.Name = "Form1" Then
                        f = DirectCast(oForm, Form1)
    
                   ElseIf oForm.Name = "Form2" Then
                        f = DirectCast(oForm, Form2)
                   End If
                   
                   f.TextBox1 = "Qualcosa"
                   ....
    
    Funziona, ma mi piace poco. Potrei fare di meglio forse con una metodologia più OOP orientata? Come?
    Grazie.

    Edit:
    Anzi, non funziona proprio: TextBox1 non viene riconosciuto come membro del form
    Ultima modifica di Brontolo; 11-06-2021 11:15  Motivo: Corretto codice
    ℹ️ Leggi di più su Brontolo ...

  2. #2
    Sgrubak non è in linea Scribacchino
    Quote Originariamente inviato da Brontolo Visualizza il messaggio
    TextBox1 non viene riconosciuto come membro del form
    Questo lo puoi risolvere facilmente cercando la textbox tra i Controls:
    Dim txt as TextBox = DirectCast(f.Controls("TextBox1"), TextBox)
    txt = "Qualcosa"
    
    Per andare più sull'OOP, derivi Form2 da Form1, e su Form 1 esponi il metodo. Così poi lo ritrovi su Form2 e non ti serve nemmeno il cast.

    EDIT: Anzi, dato che partirai da un oggetto a popolare la form, gli passi quello come argomento, piuttosto che la form da popolare.
    Ultima modifica di Sgrubak; 11-06-2021 11:35  Motivo: Aggiunto DirectCast

  3. #3
    L'avatar di _alka_
    _alka_ non è in linea Very Important Person
    Quote Originariamente inviato da Brontolo Visualizza il messaggio
    Potrei fare di meglio forse con una metodologia più OOP orientata? Come?
    Sì, ricordati che puoi sempre creare un Form che deriva da un altro, oppure creare più istanze dello stesso Form, magari che è in grado di supportare comportamenti diversi ma molto simili, codificati e selezionabili con opportune proprietà.

    Ciao!
    ℹ️ Leggi di più su _alka_ ...

  4. #4
    Quote Originariamente inviato da Sgrubak Visualizza il messaggio
    EDIT: Anzi, dato che partirai da un oggetto a popolare la form, gli passi quello come argomento, piuttosto che la form da popolare.
    Quoto

    Se la via dell'ereditarietà non è percorribile, quella di avere "un oggetto" Ad-Hoc, che faccia da tramite tra lo strato Dati e lo strato Applicativo, potrebbe essere un'alternativa.

    Una volta che avrai popolato l'oggetto, potrai estrarre i dati tramite le Proprietà che avrai creato, passando il riferimento dell'oggetto alle Form, oppure puoi passare i dati alle Form tramite l'implementazione di eventi.
    ℹ️ Leggi di più su Fix ...

  5. #5
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Ci provo eh! Vi farò sapere, grazie per ora.
    ℹ️ Leggi di più su Brontolo ...

  6. #6
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Ok, credo di esserci riuscito. Vediamo se ho applicato bene la vostra lezione di OOP.
    Ho implementato una classe con un paio di proprietà di input che rappresentano le chiavi dei dati da reperire nel database.
    I due form, che contengono quattro textbox, due datapicker, una datagridview e sei combobox, istanziano la classe fornendo le chiavi e un indispensabile parametro che serve a operare un minimo di differenziazione nei metodi di reperimento dei dati.
    L'oggetto istanziato, tramite una serie di metodi suoi, restituisce i dati in una serie di proprietà, una delle quali è un elenco di righe di numero variabile; in pratica è ciò che serve per popolare la datagridview. Questa proprietà è di tipo DataTable (è una scelta giusta?)
    I form popolano i propri controlli con i valori restituiti da queste proprietà.
    Detta così sembra quasi facile, ma il tutto richiede qualche centinaio di linee. Diciamo mezza giornata.
    Grazie.
    ℹ️ Leggi di più su Brontolo ...

  7. #7
    Più o meno si.

    Inizia pian piano a strutturare la Classe, cercando di renderla indipendente e, perché no, riutilizzabile.

    Valuta se il dato è più portato ad essere una Proprietà o potrebbe essere il risultato di un metodo.

    La DataTable la vedrei più da metodo.
    ℹ️ Leggi di più su Fix ...

  8. #8
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Indipendente sì, riutilizzabile ne dubito perché la materia trattata è molto specifica.
    I dati sono molteplici, per questo mi sembra più comodo ottenerli tramite proprietà, altrimenti dovrei implementare un metodo per ciascuno di essi. O no?
    ℹ️ Leggi di più su Brontolo ...

  9. #9
    Se hai solo 1 DataTable, potrebbe starci.

    La DataTable io la vedo più come una rappresentazione del dato, quindi mi immagino un metodo .ToDataTable come anche .ToQualcosaltro, che restituiscano il dato nella rappresentazione desiderata.

    Non conosco il contenuto del progetto, inizia come ti senti più a tuo agio, poi le cose si possono sempre ottimizzare in seguito.
    ℹ️ Leggi di più su Fix ...

  10. #10
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Grazie.
    ℹ️ Leggi di più su Brontolo ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Richiamare la stessa funzione da due form diversi
    Da luca.pizzonia nel forum Visual Basic .Net
    Risposte: 7
    Ultimo Post: 01-10-2010, 21:08
  2. Funzione per aprire form da stringa
    Da pizzorni nel forum Visual Basic .Net
    Risposte: 8
    Ultimo Post: 25-02-2010, 18:39
  3. [ACCESS - VBA] Funzione ricerca duplicati in una form
    Da windswalker nel forum Microsoft Access
    Risposte: 4
    Ultimo Post: 12-05-2008, 11:39
  4. [Javascript]funzione per 2 pulsanti in un form
    Da onsitus nel forum HTML, CSS e JavaScript
    Risposte: 61
    Ultimo Post: 06-01-2008, 18:05
  5. [Javascript]Funzione per invio form
    Da Vanessa nel forum HTML, CSS e JavaScript
    Risposte: 3
    Ultimo Post: 09-12-2006, 01:23