En mi proyecto hay dos formas: la primera forma la nombré frmSettings, usaré cuadros de texto para guardar valores en el archivo INI. segunda forma lo llamé frmSelectFolder, lo había incluido con DirListBox y 2 botones de comando

enter image description here

Como se muestra en la imagen adjunta arriba en el formulario de Configuración, tengo 8 cuadros de texto y 8 botones de comando para buscar la ruta de la carpeta que se seleccionará de frmSelectFolder

¿Cómo usar frmSelectFolder para todos los cuadros de texto sin duplicar este formulario por cada botón de comando para devolver el valor de control DirlistBox?

vb6
0
Mohamed Soliman 1 ago. 2020 a las 18:24

1 respuesta

La mejor respuesta

Aquí hay un código de muestra para el formulario frmSelectFolder secundario

Option Explicit

Private m_bConfirm          As Boolean

Public Function Init(sPath As String) As Boolean
    Dir1.Path = sPath
    Show vbModal
    If m_bConfirm Then
        sPath = Dir1.Path
        '--- success
        Init = True
    End If
    Unload Me
End Function

Private Sub cmdOk_Click()
    If LenB(Dir1.Path) = 0 Then
        MsgBox "Please select a path!", vbExclamation
        Exit Sub
    End If
    m_bConfirm = True
    Visible = False
End Sub

Private Sub cmdCancel_Click()
    Visible = False
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    If UnloadMode <> vbFormCode Then
        Cancel = 1
        Visible = False
    End If
End Sub

A continuación, se explica cómo llamar al método Init anterior desde el frmSettings principal.

Option Explicit

Private Sub cmdStartupPath_Click()
    Dim sPath           As String
    Dim oFrmSelector    As New frmSelectFolder
    
    sPath = txtStartupPath.Text
    If oFrmSelector.Init(sPath) Then
        txtStartupPath.Text = sPath
        txtStartupPath.SetFocus
    End If
End Sub

Private Sub cmdDownloadPath_Click()
    Dim sPath           As String
    Dim oFrmSelector    As New frmSelectFolder
    
    sPath = txtDownloadPath.Text
    If oFrmSelector.Init(sPath) Then
        txtDownloadPath.Text = sPath
        txtDownloadPath.SetFocus
    End If
End Sub

Aquí hay un enlace a un proyecto de muestra completo para que lo investigue: SelectFolder.zip

1
wqw 2 ago. 2020 a las 13:22