• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

rui_fernandes

[vb.net 2003] Indicar objectos de outro Form...

13 mensagens neste tópico

Boas...

Tenho um form para adicionar tipos de dias n1 Base de Dados...

Mas ao carregar no botao adicionar o que este vai fazer é ligar-se a Base de Dados, adicionar o registo, vai mostrar novamente numa DATAGRID os registos da tabela actualizada, e depois desliga a coneccao.

Mas o meu problema é como indicar a DATAGRID de outro form para serem descarregados os registou actualizados...

Dim frm1 As frm_tipo_dia 'inicializar form para indicar onde se
'encontra a datagrid onde vamos mandar actualizar os dados

mostrarDataGrid("SELECT * FROM tipo_dia", frm1.DataGrid_tipo_dias)

foi assim que indiquei onde estava a DATAGRID.

mas da erro, n funciona...

Onde estara o mal?

a declaracao da variavel frm1?

Agradecia a ajuda.

cumps.

RUI FERNANDES.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Indica o erro que te dá...assim é mais facil pra todos darem-te uma ajuda.

Mas enquanto isso, experimenta adicionar o New na declaração do formulário, pq assim não instancias o objecto.

Dim frm1 As New frm_tipo_dia

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o erro que da e o seguinte...

Object reference not set to an instance of an object.

com o NEW nao resolve o meu problema...

:hmm:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

penso que dá esse erro pois tu declaras uma nova variável como a form existente, no entanto não tens um método para preencher a datagrid dessa nova variável que acabaste de criar e dá-te esse erro. Não tenho a certeza mas creio que está relacionado com isso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Criei a funcao para preencher a datagrid... ---> mostrarDataGrid("comando SQL", "datagrid onde vai ser mostrada")

o form esta iniciado, isto e, apartir dum form abro outro, e nesse mando mostrar na datagrid os novos registos...

mas da esse erro..

se puzer o nome do form n da, dix k n esta declarado....

p issu e k decrarei a variavel cm o form k eu keria...

mas da o erro...

ja esperimentei c a solucao k deram de por o NEW, n funciona, mas tb n tem grande logica porke o k o NEW faz e criar um novo objecto neste caso, e o k eu keru e indicar um ja existente..

penso k esta aki uma duvida que secalhar ning pensou ainda e se todos ajudarmos iremos conseguir descubrir. ;)

CUMPS.

RUI FERNANDES

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado pela ajuda de quem sabe de vb neste forum, principalmente aos mestres...

a duvida inda pressiste e ning respondeu ao post.  :eek:

:hmm:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

    Public Function mostrarDataGrid(ByVal Sql As String, ByVal grid As DataGrid)

        num_reg = 0

        Dim DS As DataSet = New DataSet
        Dim DA As OleDbDataAdapter = New OleDbDataAdapter
        DA.SelectCommand = New OleDbCommand(Sql, coneccaoBD)
        DA.Fill(DS)
        'guarda numero de registos na variavel global para saber quantos registem tem....
        num_reg = DS.Tables(0).Rows.Count

        grid.DataSource = DS.Tables(0)

        DA.Dispose()
        DS.Dispose()
end function

penso que o problema n esteja aki...

se calhar nao percebest a minha duvida...

obrigado p teres respondido.

cumps.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu também ja andei com problemas parecidos.

A minha solução foi :

estou no FORM1 e quero mandar ou ir buscar qq coisa ao FORM2,

Entao dentro do FORM1 (Funcao, sub ou qq coisa) abria uma nova instancia do FORM2.

Na altura fiz uma função para verificar se ja havia uma instancia (neste caso FORM2) aberta e chamava esse form senao criava um novo.

exemplo:

    Public Function mostrarDataGrid(ByVal Sql As String)


        Dim f2 As New FORM2
        f2 = FORM2.Instance ' este método verifica se havia uma instância (neste caso FORM2) aberta e chamava esse FORM senão criava um novo (No máximo so permitia 1 instância).
        f2.Show()

        num_reg = 0

        Dim DS As DataSet = New DataSet
        Dim DA As OleDbDataAdapter = New OleDbDataAdapter
        DA.SelectCommand = New OleDbCommand(Sql, coneccaoBD)
        DA.Fill(DS)
        'guarda numero de registos na variavel global para saber quantos registem tem....
        num_reg = DS.Tables(0).Rows.Count

        f2.grid.DataSource = DS.Tables(0)

        DA.Dispose()
        DS.Dispose()
end function

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas frodo...

Dim f2 As New FORM2
f2 = FORM2.Instance
f2.Show()

axu que isto esta um bocado confuso.

declaras a variabel f2=NEW FORM2

e dp atribuis a mesma FORM2.instance   ????

este codigo e em que form?no 1º?

se pudesses explicar melhor esta ideia...

agradecia.

tanks.

cumps.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não me lembro do código, mas era algo do tipo

  Private _Instance As F2 = Nothing

    Public Function Instance() As F2

        If _Instance Is Nothing  Then

            _Instance = New F2

        End If

        _Instance.BringToFront()

        Return _Instance

    End Function

Tens de colocar na classe do form2 que queres.

1 abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas...

Tive a ver os eventos do FORM, e encontrei um que se enquadra no que eu kero.

com o evento "activated", ja consigo resolver o meu problema.

por exemplo,quando o form for ativado(quando faco o showdialog(),e depois quando fecho o form2 e activa o form 1), ele actualiza a datagrid com a funcao que criei.

espero ter sido explicito e que tenham percebido a logica a minha solucao.

cumps.

e mais uma vez obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora