Deplacer controle (pictureBox) durant l'execution [Résolu]

cs_fcolo 201 Messages postés mercredi 8 février 2006Date d'inscription 20 février 2007 Dernière intervention - 9 mars 2006 à 17:29 - Dernière réponse : cs_fcolo 201 Messages postés mercredi 8 février 2006Date d'inscription 20 février 2007 Dernière intervention
- 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
Afficher la suite 

Votre réponse

1 réponse

Meilleure réponse
cs_fcolo 201 Messages postés mercredi 8 février 2006Date d'inscription 20 février 2007 Dernière intervention - 10 mars 2006 à 09:57
3
Merci
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

Merci cs_fcolo 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 123 internautes ce mois-ci

Commenter la réponse de cs_fcolo

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.