none
Formulario se "adaptando" RRS feed

  • Pergunta

  • Queria saber como faço para um formulário "virar" outro. por exemplo tenho o formulário "login" quando o usuário efetua o login, essa tela de login, viraria o menu principal, mas sem fechar um form e abrir outro, queria saber se tem como. Obrigado !
    segunda-feira, 27 de maio de 2013 07:47

Todas as Respostas

  • raphaolee Por quê vc tem que fazer isso ?
    Que eu saiba não dá pra fazer
    segunda-feira, 27 de maio de 2013 13:35
  • Não queria que ficasse abrindo varios formularios, mas que um virasse os demais, ou seja, ia aparecer 1 janela para o usuario, e quando ele clicasse por exemplo nas configurações a janela iria mostrar a da configuração sem abrir outra e ficar 1 sobrepondo outra.
    sexta-feira, 31 de maio de 2013 00:26
  • Olá!

    Eu nunca vi o que vc precisa. Acredito que deve existir, mas nunca precisei de algo assim. A forma que eu imagino como isso poderia ser feito seria o seu form ser mutante. Mas aí vc teria muito mais trabalho em fazer essa mutação do que ter outros formulários pré-montados.

    Digamos que o primeiro form teria 2 textbox, 2 botões e uma dimensão de pequeno porte. No load, vc configuraria todas essas informações. Primeiro definiria o tamanho do form, depois criaria os objetos em runtime, posicionaria esses objetos aí. Depois vc teria que criar os eventos, tudo em modo runtime. Eu não sei fazer isso, mas acho que é possível vc criar um objeto e depois adicionar o evento click por exemplo.

    Supondo que vc conseguisse criar essa primeira parte, com as funções de validação de usuário e senha, vem a segunda mutação. Onde vc iria destruir os componentes já utilizados, redefinir o tamanho do form, depois criar todos os objetos referentes ao que deveria ser o novo form, posicionar os objetos, criar os eventos, as funções de tratamentos é que seria uma outra dor de cabela a parte. Como vc faria? via módulo? para cada form mutante vc teria um módulo? Ou vc colocaria tudo dentro desse form e conforme fosse sofrendo mutação vc iria chamando as funções já criadas?

    Assim.... eu acho que isso iria ser irmão bastardo do caos... para controlar isso seria uma dor de cabeça. Fazer o debug então, toda vez que precisasse tratar um determinado erro, vc teria que passar por todas as mutações primárias até chegar aquela tela, para ter uma visão completa do seu problema.

    A minha opinião é essa, de que não compensa. Mas também preciso ver a sua necessidade. Qual a finalidade de vc ter um único form mutante? Eu não consigo ainda perceber a sua necessidade real para querer montar algo assim.

    Se vc quiser ainda continuar nesse caminho, vc terá que estudar criação de objetos em runtime. Vou postar alguns links aqui.

    link 1

    link 2

    link 3

     Não é muita coisa, mas pelo menos já da para vc começar a estudar. Acredito que vc irá encontrar muita literatura em inglês conforme for aprofundando nesse assunto.

    Bom, boa sorte e bons estudos!

    Att.

    Giovani

    sexta-feira, 31 de maio de 2013 03:04
  • Olá!

    Eu estava testando a sua idéia de usar o mesmo form para tudo, fazendo mutação nele...e cara...não compensa! Claro que é apenas a minha humilde opinião. Mas eu vou postar aqui como eu fiz...todos os códigos.

    Código do Form1:

    Public Class Form1
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.Height = 163
            Me.Width = 355
            Me.Controls.Add(CriaObj("Label", "lblLogin", 10, 3, 100, 15, "Login:"))
            Me.Controls.Add(CriaObj("Label", "lblSenha", 30, 3, 100, 15, "Senha:"))
            Me.Controls.Add(CriaObj("TextBox", "txtLogin", 10, 110, 100, 15))
            Me.Controls.Add(CriaObj("TextBox", "txtSenha", 30, 110, 100, 15))
            Me.Controls.Add(CriaObj("Button", "btnEntrar", 60, 110, 70, 30, "Entrar"))
            Me.Controls.Add(CriaObj("Button", "btnSair", 60, 190, 70, 30, "Sair"))
            Me.Refresh()
        End Sub
    
        Public Sub MyClick()
            '
            ' Code to be executed when the event is raised.
            '
            If Me.Controls("txtLogin").Text = "" Then
                MsgBox("Digite um Login!")
                Exit Sub
            End If
            If Me.Controls("txtSenha").Text = "" Then
                MsgBox("Digite uma Senha!")
                Exit Sub
            End If
            If Me.Controls("txtLogin").Text = "User" Then
                If Me.Controls("txtSenha").Text = "123" Then
                    Mutacao(1)
                End If
            End If
    
        End Sub
    
        Sub Mutacao(ByVal iOP As Integer)
            Select Case iOP
                Case 1
                    For i As Integer = 0 To Me.Controls.Count - 1
                        'MsgBox(Me.Controls(i).Name)
                        Me.Controls(i).Visible = False
                        'Me.Controls(i).Dispose()
                    Next
                    Me.Refresh()
                    Me.Height = 313
                    Me.Width = 507
                    Me.Controls.Add(CriaObj("TextBox", "txtOiMundo", 10, 110, 100, 100, "Oi Mundo!!!"))
                    Me.Refresh()
            End Select
        End Sub
    
    End Class
    

    Código do módule1:

    Module Module1
        Dim WithEvents oButton As Button
        Dim WithEvents oTextBox As TextBox
        Function CriaObj(ByVal sTipo As String, ByVal sNome As String, ByVal iTop As Integer, ByVal ileft As Integer, ByVal iWidth As Integer, ByVal iHeigth As Integer, Optional ByVal sValor As String = "") As Object
            Select Case sTipo.ToUpper
                Case "LABEL"
                    Dim labelAux As New Label
                    labelAux.Name = sNome
                    labelAux.Top = iTop
                    labelAux.Left = ileft
                    labelAux.Width = iWidth
                    labelAux.Height = iHeigth
                    If sValor.Trim <> "" Then
                        labelAux.Text = sValor
                    End If
                    Return labelAux
                Case "TEXTBOX"
                    oTextBox = New TextBox
                    oTextBox.Name = sNome
                    oTextBox.Top = iTop
                    oTextBox.Left = ileft
                    oTextBox.Width = iWidth
                    oTextBox.Height = iHeigth
                    If sValor.Trim <> "" Then
                        oTextBox.Text = sValor
                    End If
                    Return oTextBox
                Case "BUTTON"
                    oButton = New Button
                    oButton.Name = sNome
                    oButton.Top = iTop
                    oButton.Left = ileft
                    oButton.Width = iWidth
                    oButton.Height = iHeigth
                    If sValor.Trim <> "" Then
                        oButton.Text = sValor
                    End If
                    AddHandler oButton.Click, AddressOf Form1.MyClick
                    Return oButton
            End Select
        End Function
    End Module
    

    E por ultimo o código da classe para pegar o evento click do botão:

    Public Class Class1
        ' Declare the event to be raised.
        '
        Public Event MyClick()
    
        Sub RaiseMyEvent()
            '
            ' Method to raise the event.
            '
            RaiseEvent MyClick()
        End Sub
    End Class
    

    É bem tosco o negócio... eu tava aqui olhando pro teto e resolvi experimentar a sua ideia de form mutante.

    Espero que te ajude a descobrir o melhor caminho para a sua solução.

    Att.

    Giovani

    sábado, 1 de junho de 2013 03:23