Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [vb2010] form ereditati

    Abbiate pazienza, ma sull' argomento non si legge molto di chiaro...

    Dunque, se io creo dei form Ereditati da un Form di base (Aggiungi / Form Ereditato... ), se ho ben capito essi fanno tutto quello che fa il form di base PIU' quello che si aggiunge nel loro codice specifico.

    Però c' è una cosa che non capisco: sia P1 il form di base e P2 e P2 due form ereditati... prendiamo l' evento Form_Closed

    codice:
        Private Sub FrmP1_FormClosed(sender As Object, e As _
           System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
    
            P1 = False
            Me.Dispose()
    
        End Sub
    
        Private Sub FrmP2_FormClosed(sender As Object, e As _
            System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
    
            P2 = False
    
        End Sub
    
        Private Sub FrmP3_FormClosed(sender As Object, e As _
            System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
    
            P3 = False
         
       End Sub
    Inutile mettere il Me.Dispose nei due form ereditati perché leggono automaticamente il da farsi dal Form di base P1.

    Però c'è un però: quando chiudo P1 viene messa a false la variabile P1... quando chiudo P2 (o P3) viene messa a false P2 (o P3)... MA ANCHE P1 !

    Come fare in modo che le specifiche Sub siano indipendenti (a costo di aggiungere Me.Dispose in tutte), anche se P2 e P3 sono ereditati??

    Spero di essermi capito
    .

  2. #2
    Spero di essermi capito
    Spero anche io che tu ti sia capito .... ma se fai capire anche noi è pure meglio

    A parte gli scherzi ... vorrei farti notare che, in tutti e tre i metodi che hai postato, fai riferimento all'evento FormClosed dello stesso form.
    codice:
    Private Sub FrmP1_FormClosed(sender As Object, e As _
           System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed 
    
            P1 = False
            Me.Dispose()
    
        End Sub
    
        Private Sub FrmP2_FormClosed(sender As Object, e As _
            System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed 
    
    
            P2 = False
    
        End Sub
    
        Private Sub FrmP3_FormClosed(sender As Object, e As _
            System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed 
    
    
            P3 = False
         
       End Sub
    per il resto .... spiegati meglio .... e se posti dell'altro codice, ricordati di postare anche le dichiarazioni degli oggetti che, in questo caso, sono importanti.

    Ciao

  3. #3
    Si, negli esempi precedenti non ho messo la "classe principale" se si chiama così. Inoltre non ho precisato che i tre spezzoni di codice appartengono ognuno al rispettivo Form.

    Se apro un Form ereditato in modalità Codice, esso è perfettamente vuoto, c' è solo la classe "principale"

    codice:
    Public Class FrmP2
    
    End Class
    Quando creo tramite IDE i form ereditati essi funzionano perfettamente e si auto-modificano quando modifico il Form di base.

    Se da IDE aggiungo l' evento FormClosed ad un form ereditato il codice con Handles Me.FormClosed viene aggiunto automaticamente da VB, il che, detto tra noi, mi sembra anche corretto. Per cui diviene;

    codice:
    Public Class FrmP2
    
       Private Sub FrmP2_FormClosed(sender As Object, e As _
            System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed 
    
            P2 = False
    
        End Sub
    
    End Class
    Provo a rifare la domanda in altro modo, indipendente da qualsiasi codice:

    Premesso che un Form ereditato è in tutto e per tutto uguale al Form di base ed esegue pari pari il suo codice... come fare affinché almeno l' evento FormClosed sia specifico ed univoco per Form Base e Form ereditati, cioè che i Form ereditati non eseguano anche il codice Form_Closed di P1??

    Spero così la domanda sia più comprensibile.

  4. #4
    Spero così la domanda sia più comprensibile.
    Per quanto mi riguarda ..... assolutamente no.
    Ma vedo una piccolissima luce in fondo al tunnel che mi suggerisce qualcosa riguardo alle direttive Overridable e MustOverride
    Ma bisognerebbe capire bene quali sono le tue intenzioni.
    Prova ad approfondire su MSDN e facci sapere....

    Ciao.

  5. #5
    Mannaggia, eppure in questo modo mi pareva di essere stato finalmente chiaro:

    Un Form ereditato creato da Ide fa esattamente tutto quello che fa il Form Base.

    La rispettiva classe, se visualizzata, risulta priva di codice ed eventi, visto che li "prende" tutti dal Form Base.

    Se AGGIUNGO un evento nel form ereditato, esso fa TUTTO quello che fa il Form Base PIU' quello che aggiungo nel Form ereditato.

    Bene, io non voglio che la Sub FormClose del Form Base sia eseguita dai Form ereditati, ma che ogni form ereditato esegua la SUA Sub FormClosed E BASTA.

    Ho provato ogni combinazione di Protected, NotInheritable e NotOverridable sia nel Form Base che negli ereditati ma la IDE non me li fa mettere... mi da perennemente errore...

    .

  6. #6
    Una cosa del genere?
    codice:
    Public Class Class1 : Inherits Form
        Public Event MyClose()
    
        Protected Overrides Sub OnClosed(e As System.EventArgs)
            RaiseEvent MyClose()
        End Sub
    
    End Class

  7. #7
    Risolto (grazie ad aiuto esterno, confesso!)

    FrmP1

    codice:
      Protected Overridable Sub FrmP1_FormClosed(sender As Object,  _ 
                e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
    
        P1 = false
        Me.Dispose()
    
     End Sub
    FrmP2 ( ed ogni altro ereditato )

    codice:
      Protected Overrides Sub FrmP1_FormClosed(sender As Object, _
                 e As System.Windows.Forms.FormClosedEventArgs)
    
        P2 = false
        Me.Dispose()
    
     End Sub
    Bye

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.