estoy aprendieno c# y con lo que he leido he intentado practicar, como práctica decidí hacer un programa donde elijo una o mas imagenes y las muestra en mosaico como el del fondo de escritorio de windows, lo logro hacer poero como la posición es absoluta no se reacomoda cuando redimenciono la ventana, estoy haciendo un método que aga eso pero no sé como referenciar el control.propiedad.
Este es el código
Código:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Fotos
{
public partial class Form1 : Form
{
//defino los campos
int contador;
int ancho;
int alto;
int posicionInicialAncho;
int posicionInicialAlto;
int posicionActualAlto;
int posicionActualAncho;
string[] nombres;
public Form1()
{
//inicializo los campos dandoles valores iniciales
InitializeComponent();
contador = 0;
ancho = 260;
alto = 210;
posicionInicialAncho = 10;
posicionInicialAlto = 10;
posicionActualAlto = posicionInicialAlto;
posicionActualAncho = posicionInicialAncho;
}
private void btnselecciona_Click(object sender, EventArgs e)
{
// Set the file dialog to filter for graphics files.
this.openFileDialog1.Filter =
"Images (*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|" +
"All files (*.*)|*.*";
//abre el cuadro de dialogo para elejir la o las fotos
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
//guardo el ancho del panel que está acoplado a la ventana
int panelTamano = panel1.Size.Width;
//recorro el array de fotos elejidas
foreach (string file in openFileDialog1.FileNames)
{
//si es la primer interación
if (contador == 0)
{
//inicializa el array para guardar los nombres de los objetos pictureBox() creados dinámicamente
nombres = new string[openFileDialog1.FileNames.Length];
}
//en cada iteración se crea un objeto pictureBox()
PictureBox PBox = new PictureBox();
//modifico sos propiedades
PBox.Size = new Size(ancho, alto);
PBox.SizeMode = PictureBoxSizeMode.Zoom;
PBox.Name = "imgBox" + Convert.ToString(contador);
//le doy a este array el nombre de todos los obetos creados co la esperanza de poder utilizarlos más adelante
nombres[contador] = Convert.ToString(contador);
//si el ancho de la ventana supera al de las fotos lo baja a la siguiente linea
if ((posicionActualAncho + ancho + posicionInicialAncho) > panelTamano)
{
posicionActualAncho = posicionInicialAncho;
posicionActualAlto = (posicionActualAlto + posicionInicialAlto + alto);
}
//le asina poosición al control
PBox.Location = new Point(posicionActualAncho, posicionActualAlto);
//añade el control
panel1.Controls.Add(PBox);
PBox.Load(file);
posicionActualAncho = posicionActualAncho + ancho + posicionInicialAncho;
}
}
}
private void Form1_SizeChanged(object sender, EventArgs e)
{
int ventanaAlto = panel1.Size.Height;
int ventanaAncho = panel1.Size.Width;
//MessageBox.Show(Convert.ToString( nombres.Length ));
foreach(string nom in nombres)
{
if ((posicionActualAncho + ancho + posicionInicialAncho) > ventanaAncho)
{
posicionActualAncho = posicionInicialAncho;
posicionActualAlto = (posicionActualAlto + posicionInicialAlto + alto);
}
}
}
}
}