Leudassdf Posted May 4, 2012 at 02:52 PM Report #453110 Posted May 4, 2012 at 02:52 PM Boas pessoal! Tenho o seguinte codigo para a criaçao de uma pictureBox. newPictureBox.Location = New Drawing.Point(firstpoint(0) + 100, firstpoint(1)) firstpoint(0) = newPictureBox.Location.X firstpoint(1) = newPictureBox.Location.Y newPictureBox.Visible = True newPictureBox.Size = New System.Drawing.Size(126, 97) newPictureBox.BackColor = Color.Blue newPictureBox.Enabled = True 'add control to form Controls.Add(Me.newPictureBox) Eu chamo o evento quando clico num botao. O problema e que ele realmente mostra uma nova picturebox mas se voltar a clicar ele ira mostrar outra na posiçao que escolho. Mas o que eu queria mesmo era que cada vez que clica-se no butao ele cria-se as picturebox no codigo sem depois a apagar. Alguem tem ideia de como posso ultrapassar este problema?
ribeiro55 Posted May 4, 2012 at 02:56 PM Report #453112 Posted May 4, 2012 at 02:56 PM Não as adiciones ao container.... Explica lá melhor 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"
Leudassdf Posted May 4, 2012 at 03:13 PM Author Report #453117 Posted May 4, 2012 at 03:13 PM Não as adiciones ao container.... Explica lá melhor Nao as adiciono onde? Nao percebi. Vejamos eu tenho um botao. Ao clicar nele ele executa esse codigo de modo a que seja criada a picturebox. esse codigo ja a cria mas se eu voltar a clicar no mesmo de forma a puder adicionar outra a que foi criada anteriormente desaparece. Consegui-me explicar melhor?
José Lopes Posted May 4, 2012 at 03:16 PM Report #453121 Posted May 4, 2012 at 03:16 PM Se percebi bem... Isso é porque as estás a criar no mesmo local.... Tens que ter uma variável de contador que para ires incrementando a location dos novos objectos... PS - Não deveria desaparecer..... mas sim..aparecer de novo....por isso pode se outra coisa qualquer que nao me está a ocorrer... Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!
Leudassdf Posted May 4, 2012 at 03:20 PM Author Report #453124 Posted May 4, 2012 at 03:20 PM Se percebi bem... Isso é porque as estás a criar no mesmo local.... Tens que ter uma variável de contador que para ires incrementando a location dos novos objectos... PS - Não deveria desaparecer..... mas sim..aparecer de novo....por isso pode se outra coisa qualquer que nao me está a ocorrer... Ja tinha feito isso que me recomendas-te mas tambem nao fez diferença. a anterior foi sempre "eliminada", desaparece...
ribeiro55 Posted May 4, 2012 at 03:27 PM Report #453128 Posted May 4, 2012 at 03:27 PM Tens de criar uma instância da picturebox. Se newPictureBox for referência sempre à mesma PictureBox, chapéu não é? Tens de criar sempre uma nova instância. Mete o teu código completo e não o exemplo que tiraste do stack exchange ou coisa parecida. 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"
José Lopes Posted May 4, 2012 at 03:34 PM Report #453131 Posted May 4, 2012 at 03:34 PM Experimenta correr isso desse lado.. For j = 0 To 5 Dim pctbox As New PictureBox 'Instancia nova picbox Dim i As Integer 'guarda o numero de iteracoes para alterar a location pctbox.Location = New Drawing.Point(20, i * 30 - 30) 'mexes nestes valores e nos de baixo para desenhares como queres pctbox.Visible = True pctbox.Size = New System.Drawing.Size(100, 20) pctbox.BackColor = Color.Blue pctbox.Enabled = True Controls.Add(pctbox) i += 1 Next Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!
Leudassdf Posted May 4, 2012 at 03:54 PM Author Report #453137 Posted May 4, 2012 at 03:54 PM Experimenta correr isso desse lado.. For j = 0 To 5 Dim pctbox As New PictureBox 'Instancia nova picbox Dim i As Integer 'guarda o numero de iteracoes para alterar a location pctbox.Location = New Drawing.Point(20, i * 30 - 30) 'mexes nestes valores e nos de baixo para desenhares como queres pctbox.Visible = True pctbox.Size = New System.Drawing.Size(100, 20) pctbox.BackColor = Color.Blue pctbox.Enabled = True Controls.Add(pctbox) i += 1 Next Ja percebi onde esta o problema. Tinha a variavel de nova picturebox declarada num modulo. e nao fazia tipo picturee=new picturebox. E com os erros que se apreende. e Muito obrigada mesmo. Gostaria de fazer outra pergunta se nao se importassem, quando atraves da toolbox colocamos uma picturebox no form e clicamos sobre ela, vamos para o codigo, cujo evento(nao sei se e assim que se chama mas se nao for corrijam-me sff) Private Sub PictureBox2_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox2.Click End Sub o que eu queria fazer era com o codigo defenir os nomes das picturesbox que crio e depois fazer esse evento(código anterior), ou seja a cada click nas pictures que crio atraves do codigo, devo por exemplo enviar a msgbox(). so para exemplo pois o que quero fazer e permitir que todas as picturesbox que sejam criadas tenham a possibilidade de fazer um drag and drop. Sera isto possivel?
José Lopes Posted May 4, 2012 at 04:07 PM Report #453141 Posted May 4, 2012 at 04:07 PM tu até podes adicionar um handler em runtime... mas julgo que te vai apontar sempre para o mesmo lado... Tal como te disse num posta anterior, penso que a melhor solução é com a criação de um user control para esse efeito... Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!
Leudassdf Posted May 4, 2012 at 04:14 PM Author Report #453143 Posted May 4, 2012 at 04:14 PM tu até podes adicionar um handler em runtime... mas julgo que te vai apontar sempre para o mesmo lado... Tal como te disse num posta anterior, penso que a melhor solução é com a criação de um user control para esse efeito... Ja estive a ver aquele link que publicas-te na outra publicaçao. No entanto nao consegui perceber como e que eu faço aquilo. Mas se souberes de mais algum site sobre isso que aches util publica, pois vou ter que analisar varios para ver se percebo como fazer...
José Lopes Posted May 4, 2012 at 10:46 PM Report #453211 Posted May 4, 2012 at 10:46 PM Este código fica no botão para criar as pictboxes For j = 0 To 5 Dim pctbox As New PictureBox Dim i As Integer pctbox.Name = "picbox" & i pctbox.Tag = i pctbox.Location = New Drawing.Point(20, i * 30 - 30) pctbox.Visible = True pctbox.Size = New System.Drawing.Size(100, 20) pctbox.BackColor = Color.Blue pctbox.Enabled = True Controls.Add(pctbox) AddHandler pctbox.Click, AddressOf FazQualquercoisa i += 1 Next E este fica logo após... Private Sub FazQualquercoisa(ByVal Sender As Object, ByVal e As System.EventArgs) Select Case Sender.tag Case 1 MsgBox("Faz qualquer coisa para a box1") Case 2 MsgBox("Faz qualquer coisa para a box2") Case Else MsgBox("Faz aquilo que quiseres...") End Select End Sub Agora já podes clicar em cima de cada uma delas.....e ver o resultado... Mas pelo que investiguei, a pictbox não tem a propriedade allowdrag and drop, pelo qque percebi..não vai ser simples fazer aquilo que queres... Existem alguns truques...mas são isso mesmo.... mas é possível... Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!
José Lopes Posted May 5, 2012 at 12:13 AM Report #453221 Posted May 5, 2012 at 12:13 AM Estive a pensar mais um bocado..e pensei..pensei... Afinal é possível.... Este exemplo conjugado com o anterior (tratamento de acordo com a tag) deve cobrir todas as situações que queres Então no botão que carregas as boxes colocas este código... For j = 0 To 5 'coloquei esta iteracção para representar várias.... Dim pctbox As New PictureBox Dim i As Integer pctbox.Name = "picbox" & i pctbox.Tag = i pctbox.SizeMode = PictureBoxSizeMode.Zoom pctbox.AllowDrop = True pctbox.Location = New Drawing.Point(100, i * 70) pctbox.Visible = True pctbox.Size = New System.Drawing.Size(60, 60) pctbox.Enabled = True pctbox.BorderStyle = BorderStyle.FixedSingle AddHandler pctbox.DragOver, AddressOf enterPic AddHandler pctbox.DragEnter, AddressOf enterPic AddHandler pctbox.DragDrop, AddressOf TrataDrop Controls.Add(pctbox) i += 1 Next E depois a seguir colas isto..... ''' <summary> ''' Trata de altera ro formato do rato quando tem conteudo ''' </summary> ''' <param name="Sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub enterPic(ByVal Sender As Object, ByVal e As DragEventArgs) If ((e.Data.GetDataPresent(DataFormats.FileDrop)) Or e.Data.GetDataPresent("FileGroupDescriptor")) Then e.Effect = DragDropEffects.Copy End If End Sub ''' <summary> ''' Ao largar o rato vai verificar se tem data e se tiver faz qualquer coisa...neste caso... vai representar a imagem que escolheste ''' </summary> ''' <param name="Sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub TrataDrop(ByVal Sender As Object, ByVal e As DragEventArgs) Dim strFile() As String If e.Data.GetDataPresent(DataFormats.FileDrop) Then strFile = e.Data.GetData(DataFormats.FileDrop.ToString) If strFile.Length = 1 Then MsgBox(strFile(0)) Sender.Image = System.Drawing.Image.FromFile(strFile(0)) Else MsgBox("Tem mais que um ficheiro arrastado") End If End If End Sub Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!
Leudassdf Posted May 8, 2012 at 08:25 PM Author Report #453947 Posted May 8, 2012 at 08:25 PM Estive a pensar mais um bocado..e pensei..pensei... Afinal é possível.... Este exemplo conjugado com o anterior (tratamento de acordo com a tag) deve cobrir todas as situações que queres Então no botão que carregas as boxes colocas este código... For j = 0 To 5 'coloquei esta iteracção para representar várias.... Dim pctbox As New PictureBox Dim i As Integer pctbox.Name = "picbox" & i pctbox.Tag = i pctbox.SizeMode = PictureBoxSizeMode.Zoom pctbox.AllowDrop = True pctbox.Location = New Drawing.Point(100, i * 70) pctbox.Visible = True pctbox.Size = New System.Drawing.Size(60, 60) pctbox.Enabled = True pctbox.BorderStyle = BorderStyle.FixedSingle AddHandler pctbox.DragOver, AddressOf enterPic AddHandler pctbox.DragEnter, AddressOf enterPic AddHandler pctbox.DragDrop, AddressOf TrataDrop Controls.Add(pctbox) i += 1 Next E depois a seguir colas isto..... ''' <summary> ''' Trata de altera ro formato do rato quando tem conteudo ''' </summary> ''' <param name="Sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub enterPic(ByVal Sender As Object, ByVal e As DragEventArgs) If ((e.Data.GetDataPresent(DataFormats.FileDrop)) Or e.Data.GetDataPresent("FileGroupDescriptor")) Then e.Effect = DragDropEffects.Copy End If End Sub ''' <summary> ''' Ao largar o rato vai verificar se tem data e se tiver faz qualquer coisa...neste caso... vai representar a imagem que escolheste ''' </summary> ''' <param name="Sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub TrataDrop(ByVal Sender As Object, ByVal e As DragEventArgs) Dim strFile() As String If e.Data.GetDataPresent(DataFormats.FileDrop) Then strFile = e.Data.GetData(DataFormats.FileDrop.ToString) If strFile.Length = 1 Then MsgBox(strFile(0)) Sender.Image = System.Drawing.Image.FromFile(strFile(0)) Else MsgBox("Tem mais que um ficheiro arrastado") End If End If End Sub Caro José so hoje consegui voltar ao "trabalho" Verifiquei que o seu código funciona na perfeição. Aproveito para colocar outra pergunta que me pode ser util! Imaginemos que tenho uma pic com o tamanho de 100,97, e a loclizaçao no eixo x e no ponto 10(ex) Eu crio uma label. ao criar essa label como a posso colocar de forma a que ela fique centrada em relaçao a picturebox? Ja tentei isto: newlabel.Location = New Drawing.Point((pctbox.Size.Width / 2) - (lennomepic), pctbox.Location.Y + pctbox.Size.Height + 15) sendo o lennomepic o tamanho do nome que irei inserir na label. Esse mesmo nome e inserido numa inputbox... Ele centra o mesmo quando e so uma letra mas se forem varias ja nao fica centrado. Como poderei resolver esta situaçao? Ja agora aquilo que ele faria era se o nome inserido fosse maior que a picturebox, deveria introduzir o resto do texto em novas linhas de forma a que o mesmo nao ultrapassa-se a picture... Tem alguma ideia de como fazer?
Leudassdf Posted May 8, 2012 at 09:27 PM Author Report #453957 Posted May 8, 2012 at 09:27 PM Estive a pensar mais um bocado..e pensei..pensei... Afinal é possível.... Este exemplo conjugado com o anterior (tratamento de acordo com a tag) deve cobrir todas as situações que queres Então no botão que carregas as boxes colocas este código... For j = 0 To 5 'coloquei esta iteracção para representar várias.... Dim pctbox As New PictureBox Dim i As Integer pctbox.Name = "picbox" & i pctbox.Tag = i pctbox.SizeMode = PictureBoxSizeMode.Zoom pctbox.AllowDrop = True pctbox.Location = New Drawing.Point(100, i * 70) pctbox.Visible = True pctbox.Size = New System.Drawing.Size(60, 60) pctbox.Enabled = True pctbox.BorderStyle = BorderStyle.FixedSingle AddHandler pctbox.DragOver, AddressOf enterPic AddHandler pctbox.DragEnter, AddressOf enterPic AddHandler pctbox.DragDrop, AddressOf TrataDrop Controls.Add(pctbox) i += 1 Next E depois a seguir colas isto..... ''' <summary> ''' Trata de altera ro formato do rato quando tem conteudo ''' </summary> ''' <param name="Sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub enterPic(ByVal Sender As Object, ByVal e As DragEventArgs) If ((e.Data.GetDataPresent(DataFormats.FileDrop)) Or e.Data.GetDataPresent("FileGroupDescriptor")) Then e.Effect = DragDropEffects.Copy End If End Sub ''' <summary> ''' Ao largar o rato vai verificar se tem data e se tiver faz qualquer coisa...neste caso... vai representar a imagem que escolheste ''' </summary> ''' <param name="Sender"></param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub TrataDrop(ByVal Sender As Object, ByVal e As DragEventArgs) Dim strFile() As String If e.Data.GetDataPresent(DataFormats.FileDrop) Then strFile = e.Data.GetData(DataFormats.FileDrop.ToString) If strFile.Length = 1 Then MsgBox(strFile(0)) Sender.Image = System.Drawing.Image.FromFile(strFile(0)) Else MsgBox("Tem mais que um ficheiro arrastado") End If End If End Sub Resolvido!!!
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now