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

    [VB.NET] Chiudere Form Attive

    Salve a tutti,
    sempre come niubbio e profano del .net mi sto impelagando in uno sviluppo ormai millenario di un applicazione ... sto cercando di gestire un toolstripmenu dinamico che tiene tutte le form attive al suo interno , e un logout che chiude tutte le form attive ... potete aiutarmi pls ?
    Grazie mille ogni consiglio/aiuto è stra-ben accetto !
    I have tried all ... but the preferred remains SLACKWARE !
    RHCE (Linux Red Hat Certified Engineer)
    CNAC (Cisco Networking Academy Certified)
    "Non auro, sed ferro, recuperanda est patria"

  2. #2
    Penso che tu voglia avere un menu tipo quello di VisualStudio che contenga al suo interno tutte le finestre aperte nell'applicativo.

    Se e' cosi', io ho memorizzato nella proprieta' TAG della voce di menu il puntatore alla finestra aperta.

    E' il menu dell'applicativo che aggiunge ed elimina la voci dal menu contestuale.

    Logicamente sull'evento di close della finestra, viene chiamato il gestore del menu contestuale, passandogli se stessa.

    Lui cerca il valore della finestra nel TAG e trovato, elimina la voce.

    Sono stato chiaro ??

    Mauro

  3. #3
    ehm ... mica tanto ... potresti passarmi un esempio pls ?
    Grazie cmq per l'interesse !
    I have tried all ... but the preferred remains SLACKWARE !
    RHCE (Linux Red Hat Certified Engineer)
    CNAC (Cisco Networking Academy Certified)
    "Non auro, sed ferro, recuperanda est patria"

  4. #4
    L'unico esempio che ho, si trova in un applicativo troppo complesso.
    Prova a dettagliarmi meglio il problema, o meglio i tuoi dubbi.


  5. #5
    mmmm ... vorrei avere un menu a tendina (tooltip) che si popoli in maniera dinamica a seconda delle form che sono attive , in modo da poter navigare direttamente da quel menu ... mi sono fatto capire
    I have tried all ... but the preferred remains SLACKWARE !
    RHCE (Linux Red Hat Certified Engineer)
    CNAC (Cisco Networking Academy Certified)
    "Non auro, sed ferro, recuperanda est patria"

  6. #6
    ehm ... up please , nessuno mi puo aiutare ?
    I have tried all ... but the preferred remains SLACKWARE !
    RHCE (Linux Red Hat Certified Engineer)
    CNAC (Cisco Networking Academy Certified)
    "Non auro, sed ferro, recuperanda est patria"

  7. #7
    Provo a rispiegare.

    Immagino che avrai una finestra con dei bottoni, che permettono di aprire delle finestre.

    Nell'evento di buttonclick tu devi:
    Fare il new della finestra.
    Tenerti il puntatore ad essa.

    A questo punto, crea una nuova voce di menu.
    Per fare questo, ti puoi creare una nuova classe FormMenuItem che deriva da MenuItem e che al suo interno contiene una proprieta' pubblica di tipo form a cui assegnare la form appena attivata.

    Quindi crei la nuova voce di menu con il fmi = new FormMenuItem
    Assegni a fmi.form il valore della tua form.
    Attacchi il menu item al tuo menu.

    All'evento close della finestra appena creata, agganci un metodo che preso il sender dell'evento ( quindi il puntatore alla finestra ), si vada a scorrere gli item del menu e trovato quello che ha la property form = alla form appena chiuso lo elimini.


    A questo punto gestisci l'evento sul menuitem, in modo che renda attiva la form quando si clicca su di lui.

    Chiaro questa volta ?

  8. #8
    arghhhhhhhh .... mica tanto scusa so di coccio !
    I have tried all ... but the preferred remains SLACKWARE !
    RHCE (Linux Red Hat Certified Engineer)
    CNAC (Cisco Networking Academy Certified)
    "Non auro, sed ferro, recuperanda est patria"

  9. #9
    Piu' di cosi non so come fare.
    Ho fatto una fatica boia a scrivere ste 4 righe di codice.
    Programmo in C++ e C#: il VB e' solo un lontanissimissimo ricordo.

    • Clicchi quanto vuoi sul pulsante Form1 e ti si aprono delle finestre chiamate form1
    • Clicchi su form 2 e ti si aprono le finestra form2.
    • Clicchi su una voce di menu e la relativa finestra viene attivata.
    • A menu ti ritrovi l'elenco delle finestra aperte.
    • Clicchi su closeall e tutte le finestre si chiudono.



    codice:
    Public Class Form1
        Inherits System.Windows.Forms.Form
    
    #Region " Windows Form Designer generated code "
    
        Public Sub New()
            MyBase.New()
    
            InitializeComponent()
        End Sub
    
        Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
            If disposing Then
                If Not (components Is Nothing) Then
                    components.Dispose()
                End If
            End If
            MyBase.Dispose(disposing)
        End Sub
    
        Private components As System.ComponentModel.IContainer
        Friend WithEvents MainMenu1 As System.Windows.Forms.MainMenu
        Friend WithEvents MenuItem1 As System.Windows.Forms.MenuItem
        Friend WithEvents MenuItem2 As System.Windows.Forms.MenuItem
        Friend WithEvents Button1 As System.Windows.Forms.Button
        Friend WithEvents Button2 As System.Windows.Forms.Button
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
            Me.MainMenu1 = New System.Windows.Forms.MainMenu
            Me.MenuItem1 = New System.Windows.Forms.MenuItem
            Me.MenuItem2 = New System.Windows.Forms.MenuItem
            Me.Button1 = New System.Windows.Forms.Button
            Me.Button2 = New System.Windows.Forms.Button
            Me.SuspendLayout()
            '
            'MainMenu1
            '
            Me.MainMenu1.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.MenuItem1})
            '
            'MenuItem1
            '
            Me.MenuItem1.Index = 0
            Me.MenuItem1.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.MenuItem2})
            Me.MenuItem1.Text = "Windows"
            '
            'MenuItem2
            '
            Me.MenuItem2.Index = 0
            Me.MenuItem2.Text = "Close All"
            '
            'Button1
            '
            Me.Button1.Location = New System.Drawing.Point(16, 16)
            Me.Button1.Name = "Button1"
            Me.Button1.TabIndex = 0
            Me.Button1.Text = "Button1"
            '
            'Button2
            '
            Me.Button2.Location = New System.Drawing.Point(16, 48)
            Me.Button2.Name = "Button2"
            Me.Button2.TabIndex = 1
            Me.Button2.Text = "Button2"
            '
            'Form1
            '
            Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
            Me.ClientSize = New System.Drawing.Size(292, 266)
            Me.Controls.Add(Me.Button2)
            Me.Controls.Add(Me.Button1)
            Me.Menu = Me.MainMenu1
            Me.Name = "Form1"
            Me.Text = "ProvaMenu"
            Me.ResumeLayout(False)
    
        End Sub
    #End Region
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            OpenForm("Form1")
        End Sub
    
        Private Sub OpenForm(ByVal formname As String)
            Dim frm As Form = New Form
            frm.Text = formname
            frm.Show()
            AddHandler frm.Closing, AddressOf Forms_Closing
    
            Dim menuItem As FormMenuItem = New FormMenuItem
            menuItem.Text = formname
            menuItem.myform = frm
            AddHandler menuItem.Click, AddressOf MenuItem_Click
    
            MenuItem1.MenuItems.Add(menuItem)
    
        End Sub
    
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            OpenForm("Form2")
        End Sub
    
        Private Sub Forms_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs)
            For I As Integer = 1 To MenuItem1.MenuItems.Count - 1
    
                Dim mni As FormMenuItem = MenuItem1.MenuItems(I)
                If mni.myForm Is CType(sender, Form) Then
                    MenuItem1.MenuItems.RemoveAt(I)
                    Exit Sub
                End If
            Next
    
        End Sub
    
        Private Sub MenuItem_Click(ByVal sender As Object, ByVal e As System.EventArgs)
            Dim mni As FormMenuItem = CType(sender, FormMenuItem)
            mni.myForm.Activate()
        End Sub
    
        Private Sub MenuItem2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MenuItem2.Click
            For i As Integer = MenuItem1.MenuItems.Count - 1 To 1 Step -1
                Dim mni As FormMenuItem = MenuItem1.MenuItems(i)
                mni.myForm.Close()
            Next
        End Sub
    End Class
    Public Class FormMenuItem
        Inherits System.Windows.Forms.MenuItem
    
        Public myForm As System.Windows.Forms.Form
    End Class

  10. #10
    Urk ... GRAZIE MILLE ! Prenderò come spunto il tuo codice per Studiare meglio ... ho troppe lacune
    A buon rendere e grazie mille !
    I have tried all ... but the preferred remains SLACKWARE !
    RHCE (Linux Red Hat Certified Engineer)
    CNAC (Cisco Networking Academy Certified)
    "Non auro, sed ferro, recuperanda est patria"

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.