Visual Basic.NET - Crear pinturebox por cada imagen seleccionada en tiempo live

 
Vista:
sin imagen de perfil
Val: 17
Ha disminuido su posición en 14 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Crear pinturebox por cada imagen seleccionada en tiempo live

Publicado por Kennedy (18 intervenciones) el 03/01/2019 21:15:49
Hola, Feliz año a todos....
Quisiera una ayuda el asunto es que intento crear un formulario con un "Openfiledialog" con su funcion Multiselect habilitada, lo que quiero es hacer que por cada imagen que se seleccione, en formulario se cree un picturebox y en ello se muestre cada una de las imagenes seleccionadas, Este es el codigo que estoy usando.
Declaraciones de variables al inicio:
1
2
3
Dim x As Integer
Dim PicPage As New PictureBox
Dim explorer As New OpenFileDialog
Codigo en el Boton que abre el OpenfileDialog y el cual deberia cagar la imagen por cada picturebox que se cree
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
If btnNeworAdds.Text = "New" Then
    explorer.Multiselect = True
    explorer.Filter = "Image File |*.jpg"
    If explorer.ShowDialog = DialogResult.Cancel Then
        Return
    Else
        For i = 0 To explorer.FileName.Count - 1
            With PicPage
                .Height = 180
                .Width = 120
                .Parent = Panel3
                .BackColor = Color.Blue
                .SizeMode = PictureBoxSizeMode.Zoom
                .Location = New Point(1, 1 + ((Top + .Height + 5) + i))
            End With
            Panel3.Controls.Add(PicPage)
            If x = 0 Then
                PicPage.Image = Image.FromFile(explorer.FileName)
            ElseIf x = 1 Then
                PicPage.Image = Image.FromFile(explorer.FileName)
            End If
            x = x + 1
        Next
    End If
End If
Peero resulta que queda de esta manera
form
Y quiero saber que estoy haciendo mal, ya que se crea un espacio en blanco que se va extendiendo conforme se selecciones mas imagenes.
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Phil Rob
Val: 2.120
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Crear pinturebox por cada imagen seleccionada en tiempo live

Publicado por Phil Rob (508 intervenciones) el 04/01/2019 00:11:58
Hola,
Es demasiado tarde para esta noche (23:50 hora local), estudiaré tu código mañana, pero veo 2 errores en tu código:
Con MultiSelect, el OpenFileDialogBox tiene una coleccion FileNames ==> For i = 0 To explorer.FileNameS.Count - 1 (no olvidar S)
Sin duda el punto es : .Location = New Point(1, 1 + ((.Top + .Height + 5) + i)) (de lo contrario Top vale 0 ???)

Y luego, pero no es un error, el siguiente código:
1
2
3
4
5
If x = 0 Then
                        PicPage.Image = Image.FromFile(explorer.FileName)
 ElseIf x = 1 Then
                        PicPage.Image = Image.FromFile(explorer.FileName)
End If
es mismo que :
1
2
3
If x = 0 OR  x = 1 Then
                        PicPage.Image = Image.FromFile(explorer.FileName)
End If
¿Es bien?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Crear pinturebox por cada imagen seleccionada en tiempo live

Publicado por Omar (166 intervenciones) el 04/01/2019 03:54:08
Puedes cargar las imágenes en un datagridview

Otra opción. Es cargar las imágenes en un arreglo y seleccionar la carpeta donde están las imágenes. Y recorrer cada foto y mostrarlos en un datagridview. Configurando las columnas para contener fotos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 17
Ha disminuido su posición en 14 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Crear pinturebox por cada imagen seleccionada en tiempo live

Publicado por Kennedy (18 intervenciones) el 04/01/2019 17:05:44
De verdad muchas gracias por la ayuda..... me sirvio bastante se agradece
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 2.120
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Crear pinturebox por cada imagen seleccionada en tiempo live

Publicado por Phil Rob (508 intervenciones) el 04/01/2019 13:06:39
Hola,

Veo otro errore en tu código : la instanciacion de una New PictureBox debe hacerse para cada imagen, si no el último aplasta al anterior.
Pero, el mas dificil esta de calcular los posicions de imagenes.
Proyecto completo adjunto en zip (TestImages.zip).
Aquí está mi código para una ventana de 6 imágenes (para cualquier número de imagenes, tienes que modificar los cálculos) :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Private Sub btnNeworAdds_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNeworAdds.Click
    '  If btnNeworAdds.Text = "New" Then
    explorer.Multiselect = True
    explorer.Filter = "Image File 1 |*.jpg|Image File 2 |*.png"
    If explorer.ShowDialog = DialogResult.Cancel Then
        Return
    Else
        Dim NumeroImagene As Integer = explorer.FileNames.Count
        If NumeroImagene > 6 Then
            NumeroImagene = 6           ' Máximo 6 imágenes para este ejemplo : Panel3 está "dividido" en 6
        End If
        Dim AlturaImagen As Integer = Panel3.ClientRectangle.Height / 2   ' para 2 imágenes en altura    '180
        Dim AnchoImagen As Integer = Panel3.ClientRectangle.Width / 3     ' y 2 imágenes a lo ancho        '120 ' 
        Dim PosicionTop As Integer
        Dim PosicionLeft As Integer
        For i = 0 To NumeroImagene - 1
            Dim PicPage As New PictureBox  'instanciar una New PictureBox para cada imagen, si no el último aplasta al anterior 
            PicPage.Height = AlturaImagen
            PicPage.Width = AnchoImagen
            PicPage.Parent = Panel3
            PicPage.SizeMode = PictureBoxSizeMode.StretchImage   ' o PicPage.SizeMode = PictureBoxSizeMode.Zoom
            With PicPage  ' calcular la posición de cada imagen
                PosicionTop = Panel3.ClientRectangle.Top + (i \ 3) * AlturaImagen  ' división entera
                If i > 2 Then
                    PosicionLeft = Panel3.ClientRectangle.Left + (i - 3) * AnchoImagen
                Else
                    PosicionLeft = Panel3.ClientRectangle.Left + i * AnchoImagen
                End If
                .Top = PosicionTop
                .Left = PosicionLeft
            End With
            PicPage.Image = Image.FromFile(explorer.FileNames(i))
            Panel3.Controls.Add(PicPage)
            'If x = 0 Then
            '    PicPage.Image = Image.FromFile(explorer.FileName)
            'ElseIf x = 1 Then
            '    PicPage.Image = Image.FromFile(explorer.FileName)
            'End If
            'x = x + 1
        Next
        End If
        '  End If
End Sub
Espero que esto te ayude ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar