4. Cambiar la spropiedades del panel a "Color=Transparent", "AutoScroll=True", y añadr unos cuantos controles dentro del panel.
Ejemplo:
5. Ahora scrollear arriba o abajo y...
¿Como corregir este error?
Yo: He probado todo lo que me han aconsejado expertos, y sigo sin tener idea.
El método de Invalidate o Refresh soamente disimulan el problema real y crean otro problema, porque se "flashea" el panel todo el rato si scrolleamos.
Una solución sería crear una vScrollbar para mi panel, y cambiar el mínimo de scroll-lines al usar la mouse-wheel, por ejemplo scrollear 15 lineas en vez de las 6 por defecto, ya que si scrolleo una página entera no tengo ningún problema visual. Pero esto no se hacerlo por mi mismo, si alguien me pudiera dar un ejemplo se lo agradecería mucho, pues con esto ya podría terminar mi app.
Más información:
(Supuestas soluciones que a mi no me han servido del todo, quizás no he sabido usarlas correctamente)
la solucion que me funciono, es de crear un panel personalizado (una clase que herede del control panel), y dentro hacer el codigo necesario para que se bloquee el redraw, con la api LockWindowUpdate y el OptimizedDoubleBuffer que se usa para que no flickee o flashee como dijiste vos.
Protected OverridesSub OnPaint(ByVal e As PaintEventArgs)
Console.WriteLine(e.ClipRectangle.ToString())
Using br AsNew SolidBrush(Me.BackColor)
e.Graphics.FillRectangle(br, Me.ClientRectangle)
End Using
If mImage IsNotNothingThen
e.Graphics.DrawImage(mImage, 0, 0)
EndIf
MyBase.OnPaint(e)
EndSub
<DllImport("user32.dll")> _
PrivateSharedFunction LockWindowUpdate(ByVal hWnd As IntPtr)AsBoolean
EndFunction
EndClass
es como si fuera un panel comun de visual basic, ya que hereda todas als propiedades del panel, salvo que se le programa dentro para que haga lo que vos quieras. fijate que te tiene que aparecer como si fuera un control en la barra de controles, llamado "MyPanel" despues cambiale el nombre por el que quieras. para que te aparezca como control tenes que generar la solucion.
lo metes en el form y listo, usas ese.
saludos.
« Última modificación: 24 Noviembre 2012, 15:00 pm por seba123neo »
Te lo agradezco Seba, pero el efecto que consigo con ese nuevo control es el mismo que se aprecia en la imagen que puse... no cambia absolutamente nada, todo sigue igual
Para asegurarme lo he probado tanto en mi APP como creando un nuevo winform solamente con tu class, el MyPanel, y unos checkboxes como en el ejemplo que puse...
¿Debo hacer algo en especial con tu class aparte de "crear" el nuevo panel en mi form y meter los checkboxes adentro?
Por si sirve de algo, el entorno en el que lo estoy intentando es: winform + .net framework 4.5
¿Que configuración has usado para que te funcione?
Yo lo resolví así no es perfecto pero disimula casi totalmente...
Ese código en el evento Load del Form
Código
Me.DoubleBuffered=True
Panel1.GetType.GetProperty( _
"DoubleBuffered", _
Reflection.BindingFlags.NonPublic Or _
Reflection.BindingFlags.Instance) _
.SetValue(Panel1, True, Nothing)
Y en el evento Scroll, no en el MouseWheel, colocas...
Código
Panel1.Invalidate()
Sino lo vez bien entonces solo queda una alternativa, recortar el rectángulo del BackgroundImage que esta detrás del Panel y colocarlo como fondo al Panel, el método Invalidate llama al evento Paint del Panel de modo que se puede editar las coordenadas y tamaños en el evento Scroll para que al hacer Invalidate se redibuje el rectángulo. Estoy haciendo el ejemplo a ver si se ve mejor.
En línea
La Fé Mueve Montañas... ...De Dinero
La programación es más que un trabajo es más que un hobby es una pasión...
Te lo agradezco Seba, pero el efecto que consigo con ese nuevo control es el mismo que se aprecia en la imagen que puse... no cambia absolutamente nada, todo sigue igual
Para asegurarme lo he probado tanto en mi APP como creando un nuevo winform solamente con tu class, el MyPanel, y unos checkboxes como en el ejemplo que puse...
¿Debo hacer algo en especial con tu class aparte de "crear" el nuevo panel en mi form y meter los checkboxes adentro?
Por si sirve de algo, el entorno en el que lo estoy intentando es: winform + .net framework 4.5
¿Que configuración has usado para que te funcione?
!!!!!!!!!!!!! como es posible? Hice todo lo que me dijiste y solo consigo que se véa "MyPanel" como el panel de la izquierda
es más, como es posible que esos 2 paneles se muevan mientras arrastras la rueda esa? si yo creo un panel, por defecto no consigo que se mueva al arrastrar como lo haces tú... solo puedo hacerlo con la rueda de mi mouse, o pinchando en la scrollbar sin mantener apretado.
Seba, lo de la imagen es un winform??
Uf, necesito conseguir el mismo efecto
¿¿¿¿Me podrías pasar el source????
PD: Keyen, en un rato pruebo tu solución, gracias!
« Última modificación: 24 Noviembre 2012, 16:31 pm por EleKtro H@cker »
como es posible que esos 2 paneles se muevan mientras arrastras la rueda esa?
pues asi es el panel por defecto, mientras moves el scroll se mueve el contenido, no quiero creer que en el VB 2010 no se mueva el contenido, hasta el VB6 tiene esa funcion.
Citar
si yo creo un panel, por defecto no consigo que se mueva al arrastrar como lo haces tú... solo puedo hacerlo con la rueda de mi mouse, o pinchando en la scrollbar sin mantener apretado.
eso es raro, no creo que el VB 2010 es peor que el 2008 y le sacaron esa funcion
Citar
Seba, lo de la imagen es un winform??
si, es un formulario comun con una imagen de fondo, la recorte porque mi monitor es gigante y el gif pesaba megas.
asi es el panel por defecto, mientras moves el scroll se mueve el contenido, no quiero creer que en el VB 2010 no se mueva el contenido, hasta el VB6 tiene esa funcion.
Uso VS2012 (Ultimate).
He usado tu source, sin modificar NADA (Solamente he actualizado los ficheros para la migración a VS2012) y aqui tengo la prueba de lo que me ocurre, es muy raro...
Como ves las scrollbars de los paneles no hay modo de "arrastrarlos", y el panel de la derecha flickea o flashea (Y el de la izquierda ni te cuento lo que hace puf xD).
¿Alguna idea de esta diferencia entre tu imagen y la mía?
« Última modificación: 24 Noviembre 2012, 18:46 pm por EleKtro H@cker »
para saber si es un problema del VB2012 hace esto, ejecuta el .exe de la carpeta debug del proyecto que yo te pase (que esta compilado usando VB 2008), si ahi la scrollbar te funciona, es porque el problema es el VB 2012.
para saber si es un problema del VB2012 hace esto, ejecuta el .exe de la carpeta debug del proyecto que yo te pase (que esta compilado usando VB 2008), si ahi la scrollbar te funciona, es porque el problema es el VB 2012.
Hola Seba,
He vuelto a descargar el archivo de mediafire, he ejecutado el exe de la cerpeta debug, y es lo mismo, no puedo arrastrar la scrollbar y además flashea.
PD: Uso win7 x64, pero también he probado el exe en una máquina virtual con Win7 x64 sin mi theme oscuro de Windows y sin modificar
« Última modificación: 24 Noviembre 2012, 19:06 pm por EleKtro H@cker »