Deplacer controle (pictureBox) durant l'execution

Résolu
cs_fcolo Messages postés 201 Date d'inscription mercredi 8 février 2006 Statut Membre Dernière intervention 20 février 2007 - 9 mars 2006 à 17:29
cs_fcolo Messages postés 201 Date d'inscription mercredi 8 février 2006 Statut Membre Dernière intervention 20 février 2007 - 10 mars 2006 à 09:57
Bonjour,

j'ai un petit problème que je n'arrive pas à résoudre.
J'ai une application qui crée à la volet des pictureBoxs pour afficher différentes images (dans mon cas c'est des flux MJPG pour chaque pictureBox).
La form principale a un formBorderStyle à none est colle les picturebox.

Je souhaiterai que, durant l'execution, on puisse bouger les pictureBox pour les afficher dans un ordre différents.

Actuellement ils sont collés les uns à droite des autres dans l'ordre de création (on les crée durant l'exécution).

Donc ce que j'aimerai faire c'est de pouvoir les reclasser en court d'excecution, en faisant un truc assez jolie. C'est à dire que je selection un pictureBox par clic droit et que je le DRAG & DROP entre 2 pictureBox pour le coller là.

Donc lors du clic droit, je souhaiterai créer un pictureBox que je deplacerai en parallele de la sourie ton que l'utilisateur de relache pas le clic droit. Ce pictureBox serait différent de celui sur lequel s'applique le clic mais possèderai la meme image.

Mon code actuel est le suivant, mais le soucis est que le pictureBox de deplacement (movePictureBox) ne s'affiche pas.
Ma liste de pictureBox dèja crée est dans "camList". Sur chauqe pictureBox j'ai l'evenement mouseDown, mouseUp et mouseMove (pour tous la meme fonction).



private
void mouseDown(
object sender,
MouseEventArgs e)
{
mouse_pos =
Control.MousePosition;
mouse_is_down =
true;
fisrtMove =
true;
}



private
void mouseUp(
object sender,
MouseEventArgs e)
{
mouse_is_down =
false;
fisrtMove =
true;
}



private
void mouseMove(
object sender,
MouseEventArgs e)
{

if (mouse_is_down && !
this.WindowState.Equals(
FormWindowState.Maximized))
{

if (e.Button.Equals(
MouseButtons.Left))
{

Point current_pos =
this.Location;
current_pos.X = current_pos.X + (
Control.MousePosition.X - mouse_pos.X);
//add this
current_pos.Y = current_pos.Y + (
Control.MousePosition.Y - mouse_pos.Y);
//add this
this.Location = current_pos;
mouse_pos =
Control.MousePosition;
}

else
if (e.Button.Equals(
MouseButtons.Right))
{

if (fisrtMove)
{

int index = -1;

for (
int i = 0; i < camList.Count; i++)
{

if ((mouse_pos.X > (
this.Location.X + ((
PictureBox)camList[i]).Location.X)) &&
(mouse_pos.X < (
this.Location.X + ((
PictureBox)camList[i]).Location.X + ((
PictureBox)camList[i]).Width)) &&
(mouse_pos.Y > (
this.Location.Y + ((
PictureBox)camList[i]).Location.Y)) &&
(mouse_pos.Y < (
this.Location.Y + ((
PictureBox)camList[i]).Location.Y + ((
PictureBox)camList[i]).Height)))
{
index = i;

break;
}
}
movePictureBox =
new
PictureBox();
((System.ComponentModel.
ISupportInitialize)(
this.movePictureBox)).BeginInit();
movePictureBox.Location =
new System.Drawing.
Point(((
PictureBox)camList[index]).Location.X + 10, ((
PictureBox)camList[index]).Location.Y + 10);
movePictureBox.Size =
new System.Drawing.
Size(((
PictureBox)camList[index]).Width, ((
PictureBox)camList[index]).Height);

this.movePictureBox.SizeMode = System.Windows.Forms.
PictureBoxSizeMode.StretchImage;
movePictureBox.Image = ((
PictureBox)camList[index]).Image;

this.Controls.Add(
this.movePictureBox);
((System.ComponentModel.
ISupportInitialize)(
this.movePictureBox)).EndInit();
fisrtMove =
false;
mPBoxXtoMouseX = movePictureBox.Location.X - mouse_pos.X;
mPBoxYtoMouseY = movePictureBox.Location.Y - mouse_pos.Y;
}

else
{

Point current_pos = movePictureBox.Location;
current_pos.X = mouse_pos.X + mPBoxXtoMouseX;
//add this
current_pos.Y = mouse_pos.Y + mPBoxYtoMouseY;
//add this
movePictureBox.Location = current_pos;
mouse_pos =
Control.MousePosition;
}
}
}
}

Donc en résumé, je voudrais faire apparaitre un pictureBox copie du pictureBox sur lequel s'applique le clic droit qui se déplcerai tant qu'on maintient le clic droit comme le deplacement de la souris.

Je pense qu'il y aura egalement un problème car ce pictureBox sortira des limite de la form et on ne le verra pas, si vous avez une solution pour ca aussi, car si je grandi la form on ne verra pas le programme de dessous car on ne peux pas appliquer n font transparent au form.

Si vous voyez mon probleme ...

f.colo

1 réponse

cs_fcolo Messages postés 201 Date d'inscription mercredi 8 février 2006 Statut Membre Dernière intervention 20 février 2007 2
10 mars 2006 à 09:57
Le probleme ne vient pas de la création de la pictureBox, en fait elle est créée mais au desous des autres, donc je ne la voyais pas.
J'ai posé une question à ce sujet ICI.

Pour la transparence, ma solution actuelle est de grandir la taille de ma form et d'utiliser la propriété transparencyKey de ma form à la couleur de cette dernier durant le déplacement car ca me fait ramer le pc lors du déplacement de la form complete.

f.colo
3
Rejoignez-nous