Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Vb.net - CHiusura form

  1. #1

    Vb.net - CHiusura form

    Salve a tutti. Ho questo problema:
    Cliccando sul tasto1 sulla form1 apro una form2. Io vorrei che cliccando sul tasto2 della form1 mi si chiudesse la form2 e si aprisse la form3. Come devo fare?

    Da quello che ho capito devo intercettare la form2 aperta in quel momento e chiuderla e quindi aprire la form3, ma non so come fare.

    Qualcuno sa dirmi qualcosa?

    Grazie.

    Daniele

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,464
    Posta il tuo codice attuale, così lo correggiamo.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Ciao Alka. Grazie per la tua disponibilità!

    Ecco il codice. L'ho trovato nella guida in linea della Microsoft.

    Function GetForm() As String
    Dim strForm As String
    Dim loop1 As Integer
    Dim arr1() As String
    Dim coll As NameValueCollection
    ' Load Form variables into NameValueCollection variable.
    coll = Request.Form
    arr1 = coll.AllKeys ' Get names of all forms into a string array.
    For loop1 = 0 To UBound(arr1)
    strForm = strForm & "Form: " & arr1(loop1) & "
    "
    Next loop1
    Return strForm
    End Function

    Da quello che ho capito, questa funzione cerca le form aperte, tramite un ciclo loop.

    Chiaramente ho importato il System.Collections.Specialized. Però non funziona perché nella riga 'coll = Request.Form' mi dice che Request non è dichiarato. Cosa devo fare? E una volta che funziona cosa devo scrivere per far chiudere le form?

    Grazie.

    Daniele

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,464
    Originariamente inviato da Ciucianespoi
    Ecco il codice. L'ho trovato nella guida in linea della Microsoft. [...]
    Da quello che ho capito, questa funzione cerca le form aperte, tramite un ciclo loop.
    No, il codice che hai trovato viene utilizzato nelle pagine ASP.NET per scandire i valori inviati come richiesta alla pagina stessa attraverso un modulo.

    Originariamente inviato da Ciucianespoi
    Cosa devo fare? E una volta che funziona cosa devo scrivere per far chiudere le form?
    Ti esorto di nuovo a postare il codice attuale del tuo progetto, quello che hai scritto tu, almeno quello che si occupa di aprire uno dei form secondari.

    Se non l'hai ancora fatto, ti consiglio di leggere le discussioni di questa ricerca.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Ciao Alka. Perdonami se non ti ho risposto prima, ma in questo periodo sono veramente preso ...

    Attualmente una parte del problema l'ho risolta. Però ne ho un'altra.

    Per aprire una form utilizzo
    Dim frm As New NomeForm
    frm.Show()

    E fin qui ci siamo. Ma se NomeForm non lo conosco, ossia devo stabilirlo precedentemente, come faccio? Cioè, mi spiego, postandoti il codice che ho pensato ma non funziona (come la solito!):

    Dim myform as Form = NomeForm

    Dim frm as new myform
    frm.show

    Cosa c'è di sbagliato?

    Grazie.

    Daniele

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,464
    Originariamente inviato da Ciucianespoi
    Ma se NomeForm non lo conosco, ossia devo stabilirlo precedentemente, come faccio? Cioè, mi spiego, postandoti il codice che ho pensato ma non funziona (come la solito!)
    Stabilirlo precedentemente? Spiegati meglio, cosa stai cercando di realizzare? Se dai qualche indicazione sullo scopo piuttosto che sul modo di procedere, forse si riesce a trovare l'approccio giusto per ottenere quello che desideri.

    Originariamente inviato da Ciucianespoi
    Dim myform as Form = NomeForm
    Dim frm as new myform
    frm.show
    Cosa c'è di sbagliato?
    Che stai utilizzando una variabile che contiene il riferimento ad un oggetto come un riferimento ad una classe.

    Spiega a parole cosa stai cercando di realizzare nel tuo programma, cioè qual è in termini pratici l'effetto che vuoi ottenere...sarà poi il forum a suggerirti la via migliore per implementarlo.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Allora ... Spero di riuscire ad essere chiaro.

    In sostanza ho una form0 principale che non è MDI parent, sulla quale ho tre tasti: uno per aprire Form1, uno per aprire Form2 e uno per aprire form3.

    All'apertura form1, form2, form3 sono chiuse.

    Vorrei che cliccando su uno dei tre tasti succedesse questo: che si aprisse la form relativa al tasto e che nascondesse eventuali form aperte (nel caso in cui il tasto fosse quello relativo a Form1, le eventuali form aperte che deve nascondere sono la form1 o la form2).

    Attualmente per intercettare le form aperte utilizzo una classe chiamata FormsCollection il cui codice lo trovi sotto:

    Imports System.Windows.Forms
    Public Class FormsCollection : Implements IEnumerator, IEnumerable
    Private position As Integer = -1
    Private FormListRef As New ArrayList
    Private FormListName As New ArrayList

    Public Sub New()

    End Sub

    Public Property Index() As String
    Get
    Return position
    End Get
    Set(ByVal Value As String)
    position = Value
    End Set
    End Property

    Public Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator
    Return CType(Me, IEnumerator)
    End Function

    Public Function MoveNext() As Boolean Implements IEnumerator.MoveNext
    position += 1
    Return (position < FormListRef.Count)
    End Function

    Public Function MovePrevious() As Boolean
    position -= 1
    Return (position > -1)
    End Function

    Public Sub Reset() Implements IEnumerator.Reset
    position = -1
    End Sub

    Public ReadOnly Property Count() As Integer
    Get
    Return FormListRef.Count
    End Get
    End Property

    Public ReadOnly Property Current() As Object Implements IEnumerator.Current
    Get
    Return FormListRef(position)
    End Get
    End Property

    Default Public ReadOnly Property Item(ByVal index As Int32) As Form
    Get
    Return FormListRef(index)
    End Get
    End Property

    Public Sub Add(ByVal frm As Form)
    FormListRef.Add(frm)
    FormListName.Add(frm.Name)
    End Sub

    Public Overloads Sub RemoveAt(ByVal Index As Long)
    FormListRef.RemoveAt(Index)
    FormListName.RemoveAt(Index)
    End Sub

    Public Overloads Sub RemoveAt(ByVal FormName As String)
    Dim intPos As Integer = FormListName.LastIndexOf(FormName)
    FormListRef.RemoveAt(intPos)
    FormListName.RemoveAt(intPos)
    End Sub

    Public Function IsOpened(ByVal FormName As String) As Boolean
    position = FormListName.LastIndexOf(FormName)
    If position >= 0 Then Return True
    End Function
    End Class

    Nella form0 ho inserito il seguente codice per verificare che la myform non sia già aperta. Se non è aperta, la apre.
    Dim Forms As New FormsCollection
    Dim myForm As String
    Private Sub cmdLocalita_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLocalita.Click
    myForm = NomeForm
    If Forms.IsOpened(myForm) Then
    Dim frm As Form = Forms(myForm)
    Else
    Dim frm As New Parrocchie
    Forms.Add(frm)
    frm.Show()
    End If

    Per nascondere l'eventuale form aperta uso il seguente codice:
    Forms.RemoveAt(frm.Name)
    frm.Hide()

    Vorrei scrivere un codice, il più razionale possibilie, che mi permetta di fare l'operazione descritta all'inizio del messaggio.

    Spero di essere riuscito a farmi capire. Grazie.

    Daniele

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.