Tienes cierto cacao mental, que te impide pensar con claridad.
Un icono,emoticon etc... es antes que nada una imagen... es pués sencillo, basta cponer un control image y luego crear más controles image (usando new).. Y simplemente debes colocarlos todos en un mismo contenedor. Debes tener una variable que mantenga el número de elementos (si usas imgIcono(0) ... imgIcono(x), es decir índices es fácil saber cuantos hay a cada momento) cuantos vas a colocarlos en el control simplemente debes repartir el espacio para saber donde se ubicará cada uno.
Supongamos que quieres 32 píxel para el icono y 8 de separación, entonces:
1) calculas el el número de columnas que caben:
col=int((anchoRecipiente - (EspacioEntreIconos) )/ (anchoIcono + EspacioEntreIconos))
queremos valores enteros de ahí col=int(resultado).
2) Si sobra espacio es mejor ajustar el contenedor al número de columnas YA conocido (suponiendo un espacio dinámisoc, esto es que tiene en cuenta la resolución de pantalla del usuario:
contenedor.width=(col*(anchoIcono + espacioEntreIconos)) + EspacioEntreeIconos
'el espacio inicial'... Ten en cuenta que conviene que tengas un picture dentro de otro, el picture contenedor de todo es 'inamovible', el que yace dentro de este es el que contendrá los iconos, aquel picturebox se desplazará vetrticalmente con un scroll
3 ) de modo similar calculas el números de filas, aunque en este caso solo sirve para ajustar el contendor de los iconos y poder usar el scroll para mover dicho contendor dentro del picturebox si no son visibles todos los iconos.
3) empezar a situar los controles:
e=espacioEntreIconos
i=anchoicono +e
for n=0 to imgIcono.count-1
imgIcono(n).left=e +( (n mod col)* i)
o=int(n/col)
imgIcono(n).top=e + ((n mod o) * i)
next