PUXAR INFORMA?ÃO DE OUTRO FORM

WATZECK 14/06/2016 09:26:21
#463473
Bom dia pessoal.
Estou com duas dúvidas, e gostaria de novamente pedir um auxílio de vocês.
A primeira é de como puxar uma informação de outro formulário, e a outra seria como limitar um lançamento a partir de duas datas.
1º ) - Tipo assim, eu tenho em um formulário dois DateTimerPicker com o período de lançamentos (data inicial e data final), onde salvo no BD, até ai de boa.
O que eu preciso é que em outro formulário (onde faço os lançamentos) eu puxe esses períodos em uma Label.
Não estou com o programa aqui e nem com os códigos, mas eu coloquei assim no Evento Load: Label1.Text = “Período de “ & frmPeriodo.dtpInicial & “ Até “ & frmPeriodo.dtpFinal & “
O problema é que só mostra o período na Label se os dois Forms estiverem aberto, e eu gostaria que mostrasse quando eu abrisse o Form de lançamento somente.
Eu pensei em fazer um select no BD (nem testei), mas como preciso dessa informação para usar em outros Forms, estou solicitando essa ajuda.

A outra dúvida seria a seguinte:
2º ) - Eu quero verificar o período que consta nos DateTimerPicker, e somente conseguir efetuar o lançamento naquele período.
Como não estou com o programa aqui, não lembro direito com eu fiz, mas seria assim que devo colocar no botão gravar?
If Label1.Text < frmPeriodo.dtpInical.Text And Label1.Text > frmPeriodo.dtpFinal Then
MessageBox.Show([Ô]XXXXX[Ô])
Exit Sub
End Sub
Se puderem me ajudar com essas dúvida eu agradeço.
Desde já muito obrigado.
PEGUDO 14/06/2016 11:41:56
#463480
Resposta escolhida
Bom cara,
Para pegar os dados de um form e levar para outro você pode tentar este modelo: USANDO O COMMAND(), mas é preferível você usar classes:
Crie um arquivo de classe no seu projeto, chamado argumento.class, e dentro dele coloque:
Private Shared iArgumento As String

Public Shared Property argumento As String
Get
Return iArgumento
End Get
Set(value as String)
iArgumento = value
End Set
End Property


Para atribuir o argumento, no Form de envio coloque, por exemplo:
argumento.argumento = [Ô]Este é um exemplo do Form de envio[Ô]


Para [Ô]pegar [Ô] o argumento no Form que vai receber, coloque (pode ser no load):
MsgBox(argumento.argumento)


Estou sem o VS aqui, mas pelo que eu me lembro deve ser isso aí que você quer. Apenas modifique o exemplo acima para suas necessidades.
WATZECK 16/06/2016 14:38:54
#463629
Boa tarde PEGUDO!

Cara, confesso que não consegui fazer com esse exemplo acima, tem um jeito mais fácil?
Conforme telas anexo, eu só preciso puxar as informações dos DateTimePicker e fazer com que mostre na Label.
O problema é que como essas informações de datas estão em outro Form, ele só mostra na Label caso eu abra o Form antes, ou deixe os dois abertos.
Existe a possibilidade de usar alguma coisa tipo:
With

End With
??
Se tiver, qual seria o evento? (não sei se chama evento, mas blz).

WATZECK 19/06/2016 16:23:49
#463788
Boa tarde galera!

Pessoal, eu sei que o PEGUDO já até me passou o código pronto, mas eu não estou conseguindo atribuir esse código no meu projeto.

Eu criei uma Classe conforme informado acima, mas não sei onde coloco os demais códigos para que mostre na Label (lblPeriodo.Text = [Ô]Período de [Ô] & frmPeriodo.dtpInicial.Text & [Ô] Até [Ô] & frmPeriodo.dtpFinal.Text & [Ô].[Ô] & [Ô][Ô]) para que mostre já no Load do Form, ou seja, assim que chamar já mostrar o período gravado no BD.

Sei que para muitos isso é simples, e por isso estou solicitando mais essa ajuda.
NICKOSOFT 20/06/2016 19:11:38
#463816
da visualização pro lançamento, no botão consultar vc instancia o form, seta o tag com o valor, e carrega o form, no load desse form vc poe o valor da tag no campo q deseja, se um botão chama o outro form é a forma mais simples
WATZECK 21/06/2016 10:50:12
#463847
Bom dia galera.
Como eu não consegui fazer conforme informado acima, eu fiz uma gambiarra que deu certo.
Criei um Private Sub, conforme abaixo, e coloquei no Load (Periodo), para me trazer exatamente o período salvo no BD.
Eu queria simplificar o código, mas como sou fraco em programação, fiz uma gambiarra kkkkk mas o importante é que deu certo.
A ideia a principio seria fazer a mesma coisa que fiz, mas ao invés de buscar no BD, pegar a informação no outro Form (DateTimePicker), mas não consegui.
Segue o código que fiz, e funcionou:
Private Sub Periodo()
Dim Cn As New OleDbConnection(conexao)
Dim cmd As OleDbCommand
Dim cmdsql As New StringBuilder
cmdsql.Append([Ô]SELECT DataInicial, DataFinal FROM Periodo[Ô])
Cn = New OleDbConnection(conexao)
cmd = New OleDbCommand(cmdsql.ToString, Cn)
Dim DR As OleDbDataReader
Try
Cn.Open()
DR = cmd.ExecuteReader()
If DR.Read() Then
Label6.Text = DR.GetValue(0).ToString
Label7.Text = DR.GetValue(1).ToString
DR.Close()
End If
Catch ex As Exception
MessageBox.Show([Ô]Mensagem de Erro: [Ô] + ex.ToString + [Ô] - [Ô] + ex.Message)
Finally
If Cn.State <> ConnectionState.Closed Then Cn.Close()
End Try
End Sub

E para não permitir que salve em um período diferente do que consta no Form (salvo no BD), coloquei o código abaixo:
If CDate(mskDataEmissao.Text) < Label6.Text Or CDate(mskDataEmissao.Text) > Label7.Text Then
MessageBox.Show([Ô]DATA INVÁLIDA ! ([Ô] & mskDataEmissao.Text & [Ô])[Ô] & vbCrLf & vbCrLf & [Ô]Você Não Pode Gravar em um Período Fechado, ou Acima do que Consta Abaixo.[Ô] & vbCrLf & vbCrLf & [Ô]OBS.: Em Casos Excepcionais, Favor Contatar o Administrador do Sistema.[Ô], [Ô]Erro de Data.[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
mskDataEmissao.Clear()
mskDataEmissao.Focus()
lblCodigo.Text = [Ô][Ô]
Exit Sub
End If

De qualquer forma, eu agradeço novamente a ajuda de todos.
Muito obrigado.
Tópico encerrado , respostas não são mais permitidas