Jump to content

Recommended Posts

Posted

É o seguinte, eu tenho um form mdi pai, ele tem um controle, que cria um form mdi filho,com um textbox, e no mdi pai existe um botao para mandar o texto da area de transferencia para o textbox do form mdi filho que estiver ativo,mas nao estou conseguindo fazer isso,alguem pode me ajudar,a identificar o mdi filho ativo e colar o texto no textbox dele?

E outra coisa, o mdi filho pode ser movido pra todos os lados,entao as vezes ele some,quando é movido para as bordas,nao tem como bloquear as bordas do mdi pai para delimitar ate onde o mdi filho pode ser arrastado?

Posted

É o seguinte, eu tenho um form mdi pai, ele tem um controle, que cria um form mdi filho,com um textbox, e no mdi pai existe um botao para mandar o texto da area de transferencia para o textbox do form mdi filho que estiver ativo,mas nao estou conseguindo fazer isso,alguem pode me ajudar,a identificar o mdi filho ativo e colar o texto no textbox dele?

Para transportares valores entre formulários tens que usar classes.

Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Posted

poderia me dar um exemplo simples, de como incluir o texto "Teste" no textbox do mdi filho que estiver ativo? E sobre a questão de ''bloquear'' as bordas do mdi pai, como o faço?

Posted

Vou explicar melhor. Para mandar adicionar um texto em uma textbox, o código é assim

textbox.text = "Teste"

Acontece,que, o botão está no mdi pai, e o textbox no mdi filho, e pode ser aberto varios mdi filho ao mesmo tempo, por isso queria que o codigo identificasse qual mdi filho esta em foco,ativo, e mandasse o texto para o textbox desse mdi filho que estiver ativo

Posted (edited)

Acontece,que, o botão está no mdi pai, e o textbox no mdi filho, e pode ser aberto varios mdi filho ao mesmo tempo, por isso queria que o codigo identificasse qual mdi filho esta em foco,ativo, e mandasse o texto para o textbox desse mdi filho que estiver ativo

boas

veja se é isto que você necessita:

no modulo crie uma variável publica, que será carregada com o valor que pretende obter na textbox, carregamento que terá que ser feito antes de criar os n forms, ao criar os form no evento «MouseEnter» coloque «me.textbox?.text = Variável».

para obter o nome do form que tem o foco nesse evento coloque o seguinte cod:

«msgbox"me.text"»

espero ter ajudado

cumps

acao

Edited by acao
Posted

É o seguinte, eu tenho um form mdi pai, ele tem um controle, que cria um form mdi filho,com um textbox, e no mdi pai existe um botao para mandar o texto da area de transferencia para o textbox do form mdi filho que estiver ativo,mas nao estou conseguindo fazer isso,alguem pode me ajudar,a identificar o mdi filho ativo e colar o texto no textbox dele?

E outra coisa, o mdi filho pode ser movido pra todos os lados,entao as vezes ele some,quando é movido para as bordas,nao tem como bloquear as bordas do mdi pai para delimitar ate onde o mdi filho pode ser arrastado?

Tenta com uma variável publica, deve chegar para isso

"Sintax é a seguinte:

Public nome_da_variável As tipo_de_dados_da_variável

exemplo

Public var as string"

Posted (edited)

Não funcionou de nenhuma forma, porque, como eu já havia explicado, podem ser abertos diversos forms2 identicos,usando esse codigo

Dim frm = New Form2
	frm = frm
	frm.Show()
	frm.MdiParent = Me

tentei assim e também nao funcionou, o texto não passa para o form2

My.Forms.Form2.RichTextBox1.Text = ("teste")
Edited by User LoL
Posted

Procurando pela internet,encontrei esse código que faz quase aquilo que eu queria.Esse código verifica qual mdi filho está ativo, independente de quantos sejam, e copia o texto do richtextbox selecionado,gostaria de adaptar para ao inves de copiar, ele colar um texto nessa richtextbox

'Verifica o mdi ativo.
    Dim activeChild As Form = Me.ActiveMdiChild
    ' If there is an active child form, find the active control, which
    ' in this example should be a RichTextBox.
    If (Not activeChild Is Nothing) Then
	    Dim theBox As RichTextBox = _
		  TryCast(activeChild.ActiveControl, RichTextBox)
	    If (Not theBox Is Nothing) Then
		    'Copia texto selecionado.
		    Clipboard.SetDataObject(theBox.SelectedText)
	    Else
		    MessageBox.Show("Nenhum texto em richtextbox foi selecionado")
	    End If
    End If
Posted (edited)

Não funcionou de nenhuma forma, porque, como eu já havia explicado, podem ser abertos diversos forms2 identicos,usando esse codigo

Dim frm = New Form2
	frm = frm
	frm.Show()
	frm.MdiParent = Me

tentei assim e também nao funcionou, o texto não passa para o form2

My.Forms.Form2.RichTextBox1.Text = ("teste")

no exemplo que te dei se passares o rato emcima do form ele carrega a textbox.

aqui se sabes que é o form2 e so teres a variável publica e depois no evento load do form2 carregar a texto box.

me.txtbox.text = VariavelPublica.

cumps

acao

Edited by acao
Posted

Resolvi que vou deixar os comandos nos proprios mdi filhos.

Agora, alguém pode me dizer como eu faço pra "bloquear" as bordas do mdi pai para que os mdi filho não ultrapasse determinada area,e consequentemente,fazendo uma scrollbar aparecer,oque se torna chato.

Posted (edited)

boas

faz mais uma tentativa com o teu cod, mas altera ("Teste") para variável publica, eu aqui não posso testar mas acredito que dê:

My.Forms.Form2.RichTextBox1.Text = VariaveloPublica

cumps

acao

Edited by acao
Posted

Eu decidi por deixar os controles no mdi filho,pois estava dando problema com os controles no mdi pai,tem que dar o foco para o mdi filho,e depois para a richtextbox,para ir o texto,é mais conveniente deixar no mdi filho. Agora so queria saber como e´que faço para "bloquear" as bordas do mdi pai

Posted (edited)

Bem, há muitas formas de fazer isto.

A mais simples é quando se trata de algo rígido, que é o caso.

O que tu queres (ou querias, mas ficas a saber) é causar determinado efeito na janela activa.

Logo aqui, é certinho que tens de trabalhar com a propriedade ActiveMdiChild, que te vai dar acesso directo à Form que estiver activa, se alguma.

Pois bem, quando desenhas a form2 e estás a adicionar uma caixa de texto, ou lá o que seja, estás na verdade a oferecer mais membros ao tipo Form2. Se os membros forem públicos, sempre que faças referência à Form2, terás acesso a eles.

O primeiro passo é criar uma forma controlada de afectar o que pretendes no Form2.

Com o mais básico, enviar uma string para uma caixa de texto, basta definir o seguinte membro na form2:

    Public Sub InjectarTexto(Texto As String)
       TextBox1.Text = Texto
   End Sub

Na MDI parent, a única coisa que tens de fazer é indicar que a referência à ActiveMdiForm é na verdade do tipo Form2.

Ao fazê-lo, passas a ter acesso ao método que acabaste de definir. Algo tão simples como:

    If ActiveMdiChild IsNot Nothing Then
       Dim Alvo As Form2 = ActiveMdiChild
       Alvo.InjectarTexto("yey")
   End If

Já fazia o que tu querias. Fosse lá enviar "yey", despoletar uma acção ou lá o que queiras.

A segunda parte que referes também não é complicada, e passa um bocadinho por o que a lógica anterior obriga a passar, mas ao contrário.

A MDIParent não quer saber dos filhos. Melhor, não se preocupa com os eventos que são disparados nem tem consciência de onde andam nem o que fazem. Logo aqui, só há duas coisas que podes fazer: ou iteras activamente a coleção MDIChildren e verificas se andam para além dos limites do pai, ou fazes com que os próprios filhos verifiquem isso, deixando o pai sossegadinho.

Vou-te mostrar a opção não-activa, que compreende passar a lógica de verificação para os filhos.

No teu Form2 colocas o seguinte:

    Private Sub Form2_DragLeave(sender As Object, e As EventArgs) Handles Me.DragLeave
       Adaptar()
   End Sub

   Private Sub Form2_Locationchanged(sender As Object, e As EventArgs) Handles Me.Locationchanged
       'Adaptar() 'Podes activar este, mas a verificação básica abaixo fica um pouco "choppy"
   End Sub

   Private Sub Form2_ResizeEnd(sender As Object, e As EventArgs) Handles Me.ResizeEnd
       Adaptar()
   End Sub

   Private Sub Adaptar()
       Dim MDI As Form = Me.MdiParent
       If Me.Left > MDI.Width - Me.Width - 5 Then
           Me.Left = MDI.Width - Me.Width - 5
       End If
       If Me.Top > MDI.Height - Me.Height - 5 Then
           Me.Top = MDI.Height - Me.Height - 5
       End If
       If Me.Top < 5 Then Me.Top = 5
       If Me.Left < 5 Then Me.Left = 5
   End Sub

Resumidamente, cada filho verifica se está fora dos limites do pai sempre que termina um resize, um drag e até se quiseres, activamente com a troca de localização (fica um pouco choppy com essas verificações)

Edited by ribeiro55

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Posted

Funcionou certinho o código de manter os Mdi filhos dentro do Mdi pai, oque ocorreu é que, quando eu pressiono o botão de abrir um novo form2,cujo botão tem esse código:

Dim frm = New Form2
		    frm = frm
		    frm.Show()
		    frm.MdiParent = Me

Ocorre tal erro:

Referência de objeto não definida para uma instância de um objeto.

Na seguinte linha:

If Me.Left > MDI.Width - Me.Width - 5 Then

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.