Source: https://social.msdn.microsoft.com/Forums/en-US/1e767a24-4d3e-46a6-b50a-15548d19aa8a/como-hacer-para-que-un-programa-se-ajuste-automaticamente-a-la-resolucion-de-pantalla?forum=winformses
Timestamp: 2017-11-21 01:04:51+00:00

Document:
¿como hacer para que un programa se ajuste automaticamente a la resolucion de pantalla predeterminada?
Buenas Dias a todos y feliz navidad, he estado realizando un sistema en visual basic 2005, con una computadora que tiene la resolucion de pantalla en 1024 x 768 pixeles, por lo que el sistema se ve bien en computadoras con esta resolucion como predeterminada, algo que siempre me he preguntado y se los pregunto ahora, como le puedo hacer para que el sistema se ajuste a cualquier resolucion de pantalla manteniendo su aspecto original, ya que en pantalla de 800 x 600 pixeles hay elementos del programa que no se visulizan los cuales son muy importantes para el manejo del sistema. esto en programas anteriores me ha traido problemas porque no se puede acceder a ciertas funciones por botones ocultos cuando ejecuto el programa en otras resoluciones, me imagino que ha de existir alguna funcion para que el programa reconosca la resolucion y se ajuste a ella, sin mas que decir agradeciendo de antemano sus respuestas y sujerencias.
Moved by Juan Carlos Ruiz [perfil anterior]Moderator Thursday, April 16, 2009 3:14 PM masivo
Moved by Enrique M. MontejoMVP Friday, August 25, 2017 5:54 AM Pregunta relacionada con Windows Forms.
Friday, December 21, 2007 9:47 PM
Después de dar tanta vuelta lo logré y nunca pensé que fuera tan fácil. Los formularios deben tener la propiedad
"Autoscalemode" en DPI, pues los parámetros utilizados en Sizef son valores DPI. Aunque se puede manejar en Font, pero me
pareció mejor así.
class Resolucion
void ajustarResolucion(System.Windows.Forms.Form formulario)
String ancho = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Size.Width.ToString();//Obtengo el ancho de la pantalla
String alto = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Size.Height.ToString();//Obtengo el alto de la pantalla
String tamano = ancho + "x" + alto;//Concateno para utilizarlo en el switch
switch(tamano){
case "800x600":
cambiarResolucion(formulario, 110F, 110F);//Hago el ajuste con esta función
case "1024x600":
cambiarResolucion(formulario, 96F, 110F);
cambiarResolucion(formulario, 96F, 96F);
private static void cambiarResolucion(System.Windows.Forms.Form formulario, float ancho, float alto)
formulario.AutoScaleDimensions = new System.Drawing.SizeF(ancho, alto); //Ajusto la resolución
formulario.PerformAutoScale(); //Escalo el control contenedor y sus elementos secundarios.
Marked as answer by Enrique M. MontejoMVP Thursday, October 06, 2011 1:53 PM
Edited by Cristian Correa Thursday, October 06, 2011 4:49 PM
Thursday, October 06, 2011 2:22 AM
Este tema ya lo hemos tratado en el foro con anterioridad. Pásate por ejemplo por el siguiente enlace:
http://forums.microsoft.com/msdn-es/ShowPost.aspx?PostID=2108892&SiteID=11
Friday, December 21, 2007 10:11 PM
Hola toni, primero que nada muchas gracias por responder, se que puedes ayudarme, visite los enlaces que me dijiste y todo lo que indicaron yo ya lo habia hecho anteriormente, no tengo problemas con la ubicacion de los controles al maximizar o minimizar un formulario; lo que pasa es que el tamaño de los formularios son proporcionales a la resolucion predeterminada de pantalla donde realice la aplicacion, en otra computadora con otra resolucion menor los formularios salen tan grandes que el formulario supera el espacio disponible dentro de la pantalla impidiendome hasta ver los controles de cerrar, maximizar y minimizar de todo formulario, lo cual lo hace inmanipulable, espero me entiendas, quiero redimensionar o ajustar el formulario para que se vea proporcional a como se ve en la resolucion original donde fue creado por lo tanto tambien lo deben hacer sus controles, tu publicaste una funcion en c, a una integrante del foro llamada Siux, que creo que me pudiera servir, pero no se como seria el visual basic ese codigo, era para ajustar el web form,
de antemano gracias nuevamente espero puedas ayudarme
Friday, December 28, 2007 7:47 PM
Mediante la propiedad Anchor que se comentaba en el hilo que te indiqué, no sólo puedes ubicar correctamente el control, sinó que también puedes adaptar su tamaño al de la resolución. Si por ejemplo pones un botón con el anchor a los cuatro costados del formulario, verás como el botón se adapta al tamaño de dicho formulario.
En cuanto al ejemplo que comentas, la verdad es que no lo recuerdo, pero si me pasas el enlace miraré de ayudarte con él.
Aunque para otra vez, recuerda que hay disponibles de forma online muchos traductores VB.net <-> C#, como por ejemplo:
Friday, December 28, 2007 10:45 PM
Ok Toni, Nuevamente gracias, eres muy colaborador, volvere a ajustar el anchor de la forma que e indicaste, y tambien visitare, el link que me dejaste, gracias.
Thursday, January 03, 2008 10:17 PM
No olvides marcar el hilo como contestado cuando creas oportuno, gracias!
Friday, January 04, 2008 7:47 AM
Hola Eimis, disculpa que te escriba aun cuando tu posteaste tu problema en diciembre del 2007, pero te pregunto si encontraste la solución.
Yo he buscado por todos los foros, literalmente he estado meses buscando como hacer que mis aplicaciones se adapten a la resolución del monitor del usuario, pero no he podido encontrar como hacerlo, he probado muchos códigos e inclusive trabajados con ocx que se suponen que hacen el trabajo, pero funciona de manera muy lenta.
La propiedad Anchor y Dock no sirven para el problema ellas sólo acomodan los objetos en proporción al formulario, pero cuando cambias de resulución todo se deforma, se agranda o empequeñese, los objetos mantienen su distancias desde los lados pero en algunos casos no se ven en pantalla.
Por eso la solución no pasa por los Anchor y dock de eso estoy seguro.
Además no se si NET permite hacer esto de manera automatica o simplemente debo tratar de escalarlo con programacion leyendo la resolucion del usuario y cambiando sus tamaños cuando encuentre una u otra resolución, pero no he encontrada nadie que me diga que NET no lo hace automatico, por eso he seguido buscando.
Se que tu tuviste o tienes el mismo problema y te agradeceria si le encontraste solución que me ayudaras, si es posible
Friday, April 17, 2009 3:33 PM
Bueno.... lamentablemente no puedo aportar una solución a esta pregunta..... sólo quiero decir que yo estoy buscando la solución a este problema hace tiempo y todavia no la he encontrado, y tambien explicar mi experiencia.
He hecho una aplicación de visual basic net con visual studio 2010 y me pasa eso, que si diseño con una resolución de 1280/1024....... cuando luego ejecuto en un monitor con una resolución distinta no se ve bien...... si es de 800/600, por ejemplo, se ve todo enorme.
Por lo que yo he leido existe la variable "autoscaledimensions" que guarda la resolución que hay durante el diseño y luego la variable "currentautoscaledimensions" que guarda la resolución en la ejecución y cuando se inicia se comprueba automàticamente si son distintas y si no son iguales se ejecuta un procedimiento que hace el escalado automàticamente.
Tambien estan "autoscalefactor" que guarda el factor de escala (de ancho y de alto) que corresponderia aplicar y "autoscalemode" que determina el modo de escalado.
Por lo que parece que esto se deberia poder hacer automáticamente....... yo he hecho muchas pruebas y no he conseguido que funcione.
Tambien he probado de hacer un escalado manual poniendo "scale(factor de ancho, factor de alto)" en el load del formulario de inicio, y efectivamente el formulario y todos los controles se ajustan a la escal que le digo.... pero los textos y los graficos no quedan bien.
Bueno....... si alguien puediera ayudarme con este tema le estaria muy agradecido.
Saturday, October 16, 2010 10:46 AM
Hola el prgrama o los formularios siempre se ajustaran a la pantalla del cliente ya sea el tamaño que sea el problema es que hay pantallas que traen la resolucion muy baja osea los mega pixeles unas se ven con mucho aumento otras se ven ajustadas y otras nomales.. esto no es por desirlo asi por el tipo del proyecto o por el tipo de tu programa esto tiene que ver lo con la resolucion de los graphics del screen. y es por eso que tu programa se ve con muy no buena apariencia
puedes ajustar la pantalla
haciendo click derecho en el scritorio
-propiedades o personalize
-display o apariencia y alli configura la resolucion de tu screen
por el momento ami no me ha pasado algo asi , pero se me ha ocurrido esto...
Mark the better answers for you,do not turn off your mind
Visit http://www.melvinsofts.com
En su día también estuve mirando este tema y tratando de sacar algo con el siguiente enlace:
http://msdn.microsoft.com/es-es/library/ms229605(VS.90).aspx
Quizás esté aquí la solución, hay que hacer pruebas con todos las propiedades y métodos que se indica en el enlace que por falta de tiempo no lo pude llevar a cabo, por lo que podríais echar un vistazo a ver si conseguís algo vosotros.
Sunday, October 17, 2010 5:41 PM
Que tal, yo se que han pasado años desde que inicio este hilo pero ahi les va el dato, yo encontre un proyecto que hace el ajuste a la resolucion en la que este contruido el proyecto y en caso de realizar la instalacion en una maquina con resolucion diferente se siga respetando el tañalo original de los objetos, el unico detalles son la fuentes, ya lo veran por ustedes mismos: http://www.codeproject.com/KB/dotnet/Resolution_Independent.aspx
Saludos a todos y sigan esforzandoce, vale la pena.
Hola Cristian, me interesa su respuesta , he intentado esto y no lo he logrado, le agradezco si me pudiera regalar un ejemplo de ayuda o algo asi, mi correo es yonormal@hotmail.com
..tengo el mismo de problema, necesito que mi aplicacion se ajuste a diferentes resoluciones de pantalla pero no se como hacerlo. La solucion me parece interesante pero tengo varias dudas. ¿El codigo en donde lo pongo? Comó hago para llamar esa clase?
Sunday, January 22, 2012 12:17 AM
buenas, me parece muy interesante la solucion pero no se como hacer que funcione. Me puedes ayudar..??
Sunday, January 22, 2012 12:43 AM
La solución esta aqui..
http://www.codeproject.com/KB/dotnet/Resolution_Independent.aspx
este link ya esta en otro comentario arriba, lo pongo de nuevo porque a mi me funciono perfecto.
Solo tienes que mandar a ejecutar el procedimiento de la clase en la forma en el metodo Form_Load con la resolución de tu pantalla donde desarrollaste la aplicación y la forma.
dim VResolucion as New ClsResolucion
VResolucion.ResizeForm(Me, 1024,1280) ' Mi PC donde desarrolle es de 1280 de ancho x 1024 de alto
Proposed as answer by pepe_tony Wednesday, February 29, 2012 10:20 PM
PRUEBEN ESTE FUNCION:
PublicFunctionESCALIZARPANTALLA(ByValforma AsSystem.Windows.Forms.Form) AsForm
'ESTA FUNCION ADAPTA TODOS LOS CONTROLES DE UNA FORMA A LA RESOLUCION DE LA PANTALLA
Dimz AsDouble
DimintX AsInteger= Screen.PrimaryScreen.WorkingArea.Width
DimintY AsInteger= Screen.PrimaryScreen.WorkingArea.Height
z = (((intX) ^ 2 + (intY) ^ 2) ^ 0.5) / (((forma.Size.Width) ^ 2 + (forma.Size.Height) ^ 2) ^ 0.5)
Dimciclo = 0
DoWhileciclo < forma.Controls.Count
forma.Controls.Item(ciclo).Size =
NewSize(((forma.Controls.Item(ciclo).Size.Width * intX) / forma.Size.Width), ((forma.Controls.Item(ciclo).Size.Height * intY) / forma.Size.Height))
forma.Controls.Item(ciclo).Location =
NewPoint(((forma.Controls.Item(ciclo).Location.X * intX) / forma.Size.Width), ((forma.Controls.Item(ciclo).Location.Y * intY) / forma.Size.Height))
forma.Controls.Item(ciclo).Font =
NewSystem.Drawing.Font(forma.Controls.Item(ciclo).Font.FontFamily, (forma.Controls.Item(ciclo).Font.Size * z))
ciclo = ciclo + 1
forma.Size =
NewSystem.Drawing.Size(intX, intY)
Returnforma
Y EN EL LOAD DE LA FORMA LA LLAMAN DE LA SIGUIENTE MANERA
ESCALIZARPANTALLA(ME)
Friday, April 20, 2012 10:54 PM
Lo he intentado con el código que has puesto Cristian, pero el método AutoScaleDimensions no me funciona, no sé por qué motivo, pero le intento asignar cualquier valor y siempre me da el mismo (96F,96F), ¿a alguien se le ocurre porqué? He cambiado el autoscaleMode a DPI, Font, None y nada, e incluso he cambiado la resolución de la pantalla y sigue con exactamente el mismo valor AutoScaleDimensions... por favor ayuda!
Proposed as answer by Yording_cala Monday, June 18, 2012 4:28 PM
Unproposed as answer by Yording_cala Monday, June 18, 2012 4:28 PM
Tuesday, June 05, 2012 8:45 PM
ya he solucionado el problema de la resolucion
public class Neg_General
float f_HeightRatio = new float();
float f_WidthRatio = new float();
public void ResizeForm(Form ObjForm, int DesignerHeight, int DesignerWidth)
#region Code for Resizing and Font Change According to Resolution
//Specify Here the Resolution Y component in which this form is designed
//For Example if the Form is Designed at 800 * 600 Resolution then DesignerHeight=600
int i_StandardHeight = DesignerHeight;
//Specify Here the Resolution X component in which this form is designed
//For Example if the Form is Designed at 800 * 600 Resolution then DesignerWidth=800
int i_StandardWidth = DesignerWidth;
int i_PresentHeight = Screen.PrimaryScreen.Bounds.Height;//Present Resolution Height
int i_PresentWidth = Screen.PrimaryScreen.Bounds.Width;//Presnet Resolution Width
f_HeightRatio = (float)((float)i_PresentHeight / (float)i_StandardHeight);
f_WidthRatio = (float)((float)i_PresentWidth / (float)i_StandardWidth);
ObjForm.AutoScaleMode = AutoScaleMode.None;//Make the Autoscale Mode=None
ObjForm.Scale(new SizeF(f_WidthRatio, f_HeightRatio));
foreach (Control c in ObjForm.Controls)
ResizeControlStore(c);
c.Font = new Font(c.Font.FontFamily, c.Font.Size * f_HeightRatio, c.Font.Style, c.Font.Unit, ((byte)(0)));
ObjForm.Font = new Font(ObjForm.Font.FontFamily, ObjForm.Font.Size * f_HeightRatio, ObjForm.Font.Style, ObjForm.Font.Unit, ((byte)(0)));
private void ResizeControlStore(Control objCtl)
if (objCtl.HasChildren)
foreach (Control cChildren in objCtl.Controls)
if (cChildren.HasChildren)
ResizeControlStore(cChildren);
cChildren.Font = new Font(cChildren.Font.FontFamily, cChildren.Font.Size * f_HeightRatio, cChildren.Font.Style, cChildren.Font.Unit, ((byte)(0)));
objCtl.Font = new Font(objCtl.Font.FontFamily, objCtl.Font.Size * f_HeightRatio, objCtl.Font.Style, objCtl.Font.Unit, ((byte)(0)));
y al llamar al metodo en el formulario lo hacen desde el load
neg_general.ResizeForm(this, 768, 1366); //los 3 valores que mande fue el formulario,el segundo y tercer valor son el alto y el ancho de la resolucion donde el aplicacion se ve mejor
al que desee deme su correo y le mando un ejemplo
Proposed as answer by JMS SoftWare Wednesday, August 15, 2012 4:51 PM
Edited by Yording_cala Friday, August 17, 2012 2:46 PM
hola que tal YORDING_CALA la verdad e intentado y buscado por todos lados una resolucion para este problema que se ha vuelto un tormento para muchos que hemos realizado una aplicacion y nos encontramos con este problemon ya que e buscado y buscado y no encontre una solucion a esto por favor me podrias enviar un ejemplo de dicho problema me salvarias de volver a realizarlo pero ahora en miniatura ya que la resolucion de mi pantalla es de 1366 y la quiero pasar a una de 1024 (vaya problema que me a resultado saludos)
correo piotro4475@hotmail.com
Saturday, June 23, 2012 7:52 AM
Yording_cala podrías enviarme un ejemplo, ya que tengo que entregar un programa
y me están pidiendo que se ajuste a las diferentes resoluciones, se agradece de
antemano. neftali.chocano@gmail.com
Wednesday, July 25, 2012 3:47 PM
Realice un código basado en el tuyo, es sólo una prueba pero es un poco más abierto sin tener que declarar las resoluciones exactas. Sin embargo no funciona. Me puedes decir por qué no cambia la resolución del formulario?? el código es este:
int ancho =System.Windows.Forms.Screen.PrimaryScreen.Bounds.Size.Width;
int alto = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Size.Height;
float anchoN = 96F;
float altoN = 96F;
if (ancho < 1200)
anchoN = 110F;
if (alto < 800)
altoN = 110F;
this.AutoScaleDimensions = new System.Drawing.SizeF(anchoN , altoN); //Ajusto la resolución
this.PerformAutoScale();
Wednesday, August 15, 2012 4:09 PM
Excelente solución, muchas gracias Yording_cala. Tenia tiempo buscando solucion a este problema.
Les comento a la demas gente del foro que la solución que planteo Yording_cala funciona, si...al fin, lo probe en el sistema que hice para la empresa donde trabajo y todo OK. el algoritmo funciona a la perfección.
para los que trabajamos con vb.net solo basta con traducirlo al equivalente en dicho lenguaje.
Otra cosa para complementar la solución de Yording_cala, deben colocar en la propiedad Anchor = Top, Left en todos los controles del formulario a ajustar.
Exitos y saludos a todos!!
Wednesday, August 15, 2012 4:46 PM
Pelubey te cuento que la solucion de yording_cala funciona, pruebala y veras.
yo ya implemente esa solución en mi programa y funciona 100%.
Hola Yording_cala, tendras el ejemplo en VB.net porfa lo necesito urgente, gracias
Mi correo es: chriserc@outlook.com
Christian Ramirez Castillo (PERU) Soporte Tecnico - Programador
perdonen amigos me habia olvidado de este post aqui le adjunto el archivo
al que le haya servido marquela como util o como respuesta
Ajustar resolucion en c#
ajustar resolucion visual
Yording cala
Edited by Yording_cala Thursday, August 23, 2012 1:44 AM
Friday, August 17, 2012 2:33 PM
de nada hermano yo tambien llevava mucho tiempo buscandolo y me meti ha este foro y encontre algo que me ayudo ha solucionarlo, era de un men arriba en el foro aunque estaba muy incompleto y no me terminaba de dar, lo que le faltaba era un foreach que me recorriera todos los controles y dependiendo de la resolucion me lo ajustara, tambien le falta ajustar el tamaño de la fuente de cualquier tipo de letra este problema no fue para nada facil de solucionara y le faltaba ajustar el formulario a la resolucion.
pero le agradezco al men de ariba porque sin la informacion que me brindo hubiera sido imposible.
tambien te agradezco a ti JMS SoftWare por el aporte que mi hiciste lo tendre muy en cuenta
y a todos me alegro que les haya servido es muy gratificante que dias que dure solucionando esto le haya servido a alguien y a los que no la han intentado les aconsejo que la hagan porque esta 100% full.
y en unos dias me pongo a realizar el ejemplo para visual basic, y hay perdonemen a los que estuvieron esperando tanto tiempo a que les enviaran el ejemplo sino que hace dias no ingresaba a los foros
Friday, August 17, 2012 3:18 PM
oye nos tienes que hacer eso, el algoritmo se ajusta automaticamente a la resolucion de la pantalla
neg_general.ResizeForm(this, 768, 1366);
le di dos variables preterminadas porque es la resolucion con la que mejor se ve en mi pc, pero este ejemplo funciona para cualquier resolucion solo mandale las variables de ancho y alto con la que mejor se ve tu pc y ya esta, no hay necesidad de hacer esto, un brother de mas arriba del foro etiqueto un ejemplo con lo que estas planteando yo tambien lo intente pero no sucedia nada, entonces mejor desisti de eso
intentalo con el ejemplo que te adjunte mas arriba a,pruebalo y luego me dices que tal.
Edited by Yording_cala Friday, August 17, 2012 4:41 PM
Friday, August 17, 2012 4:39 PM
Ola soy nuevo por aca.. tengo el mismo problema y necesito que me pasen un ejemplo (demo) para poder realizar mi proyecto en mi universidad.. ayudenme.. jokesito24@hotmail.com.. ese es mi correo.. porfa!!.. gracias.. :D
Friday, September 14, 2012 7:57 PM
mira los link la proxima vez fijate en el foro
Edited by Yording_cala Saturday, September 15, 2012 12:04 AM
Saturday, September 15, 2012 12:02 AM
Yording_cala
puxa hermano eres el mejor gracias por el codigo,... estoy seguro que a todos les ha pasado el problema de ajustar form a cualkier pantalla.
te doy las gracias por todos :)
Sunday, December 16, 2012 4:42 PM
yashrahul fue todo un placer la ayuda a mi tambien me pasaba este error y fue muy duro conseguir una buena solucion, se que el demo no esta del todo completo aun le falta cositas, por eso espero que el tenga una mejor solucion la publique para que todos nos retroalimentes de este. y para eso existen este tipo de plataformas para que todos compartamos nuestro conocimientos
Sunday, December 16, 2012 5:10 PM
Saludos a todos, hace un tiempo tenía un programa en vb6 que se ajustaba perfectamente a cualquier resolución. Pero ni idea donde esta. Voy a tomar el ejemplo que el amigo Yording_cala proporciona y espero poder ayudar... Saludos y gracias por otorgar sus conocimientos.
Proposed as answer by Enyelber Altube Friday, May 16, 2014 1:51 AM
Unproposed as answer by Enrique M. MontejoMVP Sunday, May 14, 2017 6:02 AM
Wednesday, December 19, 2012 3:27 AM
Buenas noches.. posiblemente ya no estes en este foro.. pero queria decirte que yo utilizo V.B 6.0 y me sucede que no puedo ajustar un programa creado a cualquier resolucion, y no logro comprender tu codigo... me seria de gran ayuda que me dieras una mano, desde ya.. muchas gracias! :) mi correo es crissanabria_95@hotmail.com
hola Yording_cala, mi nombre es carlos y tengo el problema de la resolucion, en una aplicacion en visual basic 6.0 talvez tengas una solucion en esa version de visual.
Monday, June 16, 2014 8:06 AM
Busca en google el ocx AResize.
Monday, June 16, 2014 9:12 AM
YORDING_CALA, buenas tardes me podrías mandar un ejemplo en visual net 2010, mi correo es hcarive@hotmail.com
Sunday, May 14, 2017 12:39 AM
Te pregunto si YORDING_CALA si te envio el ejemplo en vb.net
Saludos. agradezco si alguien tiene el codigo de YORDING_CALA en vb.net por favor lo necesito el link que publico no esta
Friday, August 25, 2017 3:18 AM
Existen varias paginas para poder convertir el código a VB.NET.
Monday, August 28, 2017 2:48 PM
Hola por casualidad si lograste encontrar el codigo para vb.net?
Friday, September 08, 2017 8:21 PM

References: resolución

 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución