Cuando creo mi propio objeto PictureBox no logro visualizar la imagen cargada ¿por qué?
Dim Foto As New PictureBox
Foto.Image = Image.FromFile("imgsarril.png")
Foto.Location = New Point(10, 10)
Para visualizar la imagen necesitas añadir el control a tu formulario.
¿Te refieres a colocar en la vista diseño tantos controles picturebox como necesite?
Cita de: "J_F_NASH"¿Te refieres a colocar en la vista diseño tantos controles picturebox como necesite?
En absoluto. Como dice
ZaeLSiuS, tienes que agregar el control creado al formulario o control contenedor (otro picturebox o un frame por ejemplo). Para ello existe la coleccion Controls en estos contenedores:
Me.Controls.Add(Foto)
Salu2...
Ok. Entiendo.
Gracias.
Vaya, tengo otro problema. ¿El siguiente código no debería mostrar una imagen al lado de la otra? ¿por que solo me muestra la primera?:
Dim barril_1 As New PictureBox
Dim barril_2 As New PictureBox
barril_1.Image = Image.FromFile("imgs\barril.png")
barril_2.Image = Image.FromFile("imgs\barril.png")
Controls.Add(barril_1)
Controls.Add(barril_2)
barril_1.Location = New Point(10, 10)
barril_2.Location = New Point(40, 10)
S2.
Cuando creas un control desde codigo este generalmente suele tener todas sus propiedades sin inicializar, justo al contrario que al crearlos en la vista de diseño. En el caso del PictureBox no tendra definido su tamaño. Yo en mi prueba he configurado el tamaño de los controles y si los muestra:
barril_1.Size = New Point(40, 40)
barril_2.Size = New Point(40, 40)
Tambien puedes usar el autoescalado de este control si no quieres configurar a mano el tamaño:
barril_1.SizeMode = PictureBoxSizeMode.AutoSize
barril_2.SizeMode = PictureBoxSizeMode.AutoSize
Salu2...
Ok, era eso.
S2.
Bueno, ya que estoy pregunto otra cosilla. Es sobre concatenaciones:
Tengo 2 PictureBox llamados "barril_1" y "barril_2" ahora quiero llamar a una de sus propiedades dinámicamente. En el ejemplo tal vez se vea mas claro lo que quiero hacer:
dim valor as integer = 1
"barril_" & valor.propiedad = false '<-------- ¿?
¿Puede hacerse algo como esto?
* This post has been cloned sucessfull *
Para eso existen los arrays y las colecciones como listas tipadas :P (que aparte de organizar mejor los objetos de un grupo optimiza mejor el acceso a memoria). Si vas a meter varios objetos similares o relacionados (los tiles de un mapa por ejemplo) metelos en una coleccion, de esta forma podras acceder mediante su indice de posicion o mediante una clave string si se trata de un diccionario.
Dim barril As New List<Of PictureBox> ' Creamos una lista de tipo PictureBox.
Dim pic As PictureBox
pic = New PictureBox
pic.Image = Image.FromFile(etc...)
pic.Location = etc...
... todo el codigo de inicializacion del picturebox ...
barril.Add(pic) 'Agregamos el picture a la lista.
Me.Controls.Add(barril(barril.Count - 1) ' Añadimos la referencia del ultimo elemento añadido en la colecion de barriles a la coleccion de controles del formulario.
... Creamos y añadimos tantos como nos venga en gana ...
Luego para acceder a los miembros de un elemento concreto seria tan facil como esto:
Dim valor As Integer = 1
barril(valor).propiedad = false
La otra ventaja es que tambien puedes moverte por los elementos de la lista mediante un For Each si has de hacer modificaciones en masa a todos los elementos de la lista.
Salu2...
Buah! es lo que buscaba. Gracias!