Hola, espero que me ayuden con este problema.
Tal y como lo dice el titulo, quiero mover un panel que tiene un srollbar, dentro de este panel hay un picturebox. Quiero que el panel se mueva al pinchar las teclas (a, d, w, s (intente con las teclas UP, DOWN, LEFT, RIGHT. pero no fue posible porque tenia un numericUPDown en el form y tomaba estas teclas para él)), lo hice con el siguiente código, pero cuando pinchaba la tecla se movia solo la image, y el scroll se quedaba quieto; si pinchaba nuevamente la tecla, se movia el scroll, pero no la imagen, y así susecibamente.
Código (csharp) [Seleccionar]
private void frmDrawing_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = true;//Quita el sonido beep
switch (e.KeyChar) //si presiona las teclas
{
case 'w':
pnlFrontal.VerticalScroll.Value -= (pnlFrontal.VerticalScroll.Value >= movScroll) ? movScroll : pnlFrontal.VerticalScroll.Value;//Operador ternario
break;
case 's':
pnlFrontal.VerticalScroll.Value += (pnlFrontal.VerticalScroll.Value <= (maxVerScroll-movScroll)) ? movScroll : -pnlFrontal.VerticalScroll.Value + pnlFrontal.VerticalScroll.Maximum;
break;
case 'a':
pnlFrontal.HorizontalScroll.Value -= (pnlFrontal.HorizontalScroll.Value >= movScroll) ? movScroll : pnlFrontal.HorizontalScroll.Value;
break;
case 'd':
pnlFrontal.HorizontalScroll.Value += (pnlFrontal.HorizontalScroll.Value <= (maxHorScroll-movScroll)) ? movScroll : pnlFrontal.HorizontalScroll.Value;
break;
case 'x':
System.Windows.Forms.MessageBox.Show("Posicion de la imagen X = "+pboxGrid.Location.X.ToString()+"\nPosicion del Scroll X = "+pnlFrontal.HorizontalScroll.Value.ToString());
break;
default:
e.Handled = false;//No se trato la letra o tecla
break;
}
//pnlFrontal.Refresh();
}
Observe el funcionamiento del programa en el modo depurador, y efectivamente pasa eso a nivel de variables. Primero se actualiza la posicion de la imagen, pero no el scroll
(1); En la segunda pinchada se actualizaba el scroll, pero no la imagen(2).
(1) Valores que cambian en la primera pinchada de la tecla d(ScrollBar Horizontal)
Código (csharp) [Seleccionar]
AutoScrollPosition {X = -10 Y = 0} System.Drawing.Point //cambio :)
DisplayRectangle {X = -10 Y = 0 Width = 1100 Height = 1100}System.Drawing.Rectangle//cambio :D
HorizontalScroll.Value 0 int //no cambia >:(
(2) Valores que cambian en la segunda pinchada de la tecla d(ScrollBar Horizontal)
Código (csharp) [Seleccionar]
AutoScrollPosition {X = -10 Y = 0} System.Drawing.Point //No cambio
DisplayRectangle {X = -10 Y = 0 Width = 1100 Height = 1100} System.Drawing.Rectangle//No cambio
HorizontalScroll.Value 10 int //Cambio
No logro comprender por que pasa eso
Si tienen otra solución o estoy cometiendo algún error agradezco su explicación.