Hola fercho1q, realmente si te entendi bien, es algo sencillo.
Si lo que quieres es al mantener la tecla presionada se siga moviendo el picture, agrega un un control Timer y habilitalo, en su evento Tick que se genera cada 100 milisegundos por defecto determino qué tecla está presionada. En los eventos KeyDOwn y KeyUp del formulario principal, guardo el valor de la tecla presionada en una variable statica de tipo KEYS.
Por ultimo cuando determino que tecla es, simplemente agrego un pixel o quito un pixel de la coordenada actual en X o Y segun sea el caso..
Izquierda: quito un pixel de X
Derecga: agrego un pixel a X
Arriba: Quito un pixel a Y
Abajo: Agrego un pixel a Y
Tambien puedes tu si lo deseas determinar si estan presionadas las teclas Arriba e Izquierda que el picture se mueva en forma diagonal, para lo que tendrias que restar un punto en Y y otro en X.
static Keys tecla;
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
tecla = e.KeyCode;
}
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
tecla = Keys.Escape;
}
private void timer1_Tick(object sender, EventArgs e)
{
switch (tecla)
{
case Keys .Left:
this.pictureBox1.Location = new Point
(pictureBox1
.Location.X - 1, pictureBox1
.Location.Y); break;
case Keys.Right :
this.pictureBox1.Location = new Point
(pictureBox1
.Location.X + 1, pictureBox1
.Location.Y); break;
case Keys.Up :
this.pictureBox1.Location = new Point
(pictureBox1
.Location.X, pictureBox1
.Location.Y-1); break;
case Keys.Down :
this.pictureBox1.Location = new Point
(pictureBox1
.Location.X , pictureBox1
.Location.Y+1); break;
}
}
para que se mueva mas rapido, disminuye el valor de la propiedad intervalos del timer