Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
989 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Créer un contrôle dans une Form depuis un objet ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Créer un contrôle dans une Form depuis un objet ?

n°1249094
Arjuna
Aircraft Ident.: F-MBSD
Posté le 19-11-2005 à 21:10:32  profilanswer
 

J'ai un objet, et je veux qu'il crée un objet dans ma Form.
 
J'ai écrit le constructeur de la sorte :

Code :
  1. public monObj(System.Windows.Forms.Form win)
  2. {
  3. this.picture = new System.Windows.Forms.PictureBox();
  4. this.picture.Image = System.Drawing.Image.FromFile("rond.gif" );
  5. this.picture.Width = 100;
  6. this.picture.Height = 100;
  7. this.picture.Location = new System.Drawing.Point(10, 10);
  8. win.Controls.Add(picture);
  9. }


 
Et je l'appelle depuis le Form1_Load de ma Form :

Code :
  1. monObj test = new monObj(this);
  2. this.Refresh();


 
Mais ça n'affiche rien :/
 
J'ai oublié quoi ?

mood
Publicité
Posté le 19-11-2005 à 21:10:32  profilanswer
 

n°1249096
Arjuna
Aircraft Ident.: F-MBSD
Posté le 19-11-2005 à 21:17:09  profilanswer
 

Idem si je met dans le Main sans lien vers la Form après le "application.Run()"

n°1249100
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 19-11-2005 à 21:20:49  profilanswer
 

marche très bien chez moi :spamafote:
 
edit: sous C# Express 2005


Message édité par Harkonnen le 19-11-2005 à 21:21:18

---------------
J'ai un string dans l'array (Paris Hilton)
n°1249106
Arjuna
Aircraft Ident.: F-MBSD
Posté le 19-11-2005 à 21:33:21  profilanswer
 

:heink:
 
Je viens de trouver ce qui déconne, en fait ce code marche :D
 
Par contre, je vois pas ce qui déconne là...
 
Je veux trouver le rayon d'une sphère en fonction de sa masse et de la densité de son matériau...
 
La formule est à priori :

Code :
  1. public double radius    // m
  2.  {
  3.   get
  4.   {
  5.    return Math.Pow((weight / density) / ((4 / 3) * Math.PI), 1 / 3);
  6.   }
  7.  }


 
Ce qui donne au final, dans mon cas, 159^.333 ce qui doit faire 5
Seulement... ben... pourquoi ce barge de C# me retourne 1.0 ???
 
Forcément, une image de 1x1 dont les 4 coins sont transparents, je la vois pas... :/

n°1249110
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 19-11-2005 à 21:42:02  profilanswer
 

je vais tester, donne moi tes valeurs pour weight et density


Message édité par Harkonnen le 19-11-2005 à 21:42:17

---------------
J'ai un string dans l'array (Paris Hilton)
n°1249112
Arjuna
Aircraft Ident.: F-MBSD
Posté le 19-11-2005 à 21:43:30  profilanswer
 

1000 et 2

n°1249114
Arjuna
Aircraft Ident.: F-MBSD
Posté le 19-11-2005 à 21:45:29  profilanswer
 

Sinon (pour revenir au problème original), on ne peux pas redimensionner l'élément "Image" dans un "PictureBox" :/
 
Je fais comment moi pour redimensionner ma boule ?
(je pensais faire comme avec le Web, charger une image de taille assez grosse, et la redimensionner pour avoir une image plus ou moins grande - d'où le calcul du rayon de la sphère -)

n°1249115
Arjuna
Aircraft Ident.: F-MBSD
Posté le 19-11-2005 à 21:46:55  profilanswer
 

En fait, c'est le "Pow" qui sait pas faire 159^.3333 :/
 
-- Edit --
 
J'y crois pas :o
 
Pow(x, 1 / 3)
 
Ca fait :
 
(int)1 / (int)3 = 0
 
et du coup ben... quelque soit x, ça retourne forcément 1...
 
corrigé en mettant des () autour de 1 / 3 et là il comprend que je fais un calcul sur des double :o
 
 
Et dire que j'ai l'impression de trop caster mes variables et mettre des () pour rien... Ben je crois que même en en mettant partout même quand c'est pas nécessaire, il en faut plus :D
 
 
Ceci dit, ça ne résoud pas mon problème de boules... :/ (les boules :D)


Message édité par Arjuna le 19-11-2005 à 21:50:58
n°1249121
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 19-11-2005 à 22:19:59  profilanswer
 

ben non, c'est logique :spamafote:
http://msdn2.microsoft.com/en-us/library/5kzh1b5w.aspx

Citation :


int i = 123;
 
When an integer literal has no suffix, its type is the first of these types in which its value can be represented: int, uint, long, ulong. In this example, it is of the type int.


 
Donc nul besoin de mettre des parenthèses, il te suffit de déclarer les littéraux "1" et "3" comme étant des flottants ;)
 

Code :
  1. return Math.Pow((1000 / 2) / ((4 / 3) * Math.PI), 1.0 / 3.0);


---------------
J'ai un string dans l'array (Paris Hilton)
n°1249123
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 19-11-2005 à 22:22:51  profilanswer
 

sinon, pour ton problème de boule, tu peux resizer un picturebox comme ceci :
 

Code :
  1. picture.SizeMode = PictureBoxSizeMode.StretchImage;


---------------
J'ai un string dans l'array (Paris Hilton)
mood
Publicité
Posté le 19-11-2005 à 22:22:51  profilanswer
 

n°1249143
Arjuna
Aircraft Ident.: F-MBSD
Posté le 19-11-2005 à 23:23:43  profilanswer
 

En fait, je suis en train de me lancer dans DirectDraw.
 
Je suis bloqué, je n'arrive qu'à afficher des cercles par dessus une image, parceque si je vire l'image ça plante :D
 
Je viens de tilter qu'il y a de la doc et des exemples dans le SDK que j'ai téléchargé... Avec un peu de chance... :sweat:

n°1249145
Arjuna
Aircraft Ident.: F-MBSD
Posté le 19-11-2005 à 23:25:55  profilanswer
 

Ouahou ! Super la doc...
 

Citation :


DirectDraw  
 
--------------------------------------------------------------------------------
 
Warning: Microsoft DirectDraw has been deprecated. Deprecated components of Microsoft DirectX 9.0 for Managed Code are considered obsolete. While these components are still supported in this release of DirectX 9.0 for Managed Code, they may be removed in the future. When writing new applications, you should avoid using these deprecated components. When modifying existing applications, you are strongly encouraged to remove any dependency on these components.
The DirectDraw application programming interface (API) is the component of DirectX that enables you to directly manipulate display memory, the hardware blitter, hardware overlay support, and flipping surface support. For more information, see the Microsoft.DirectX.DirectDraw managed code reference documentation.
 
 
--------------------------------------------------------------------------------
 
Send comments about this topic to Microsoft. © Microsoft Corporation. All rights reserved.
 
Feedback? Please provide us with your comments on this topic.  
For more help, visit the DirectX Developer Center  


 
Et y'a que ça... Microsoft à décidé qu'il ne fallait plus dessiner en 2D :sweat:

Message cité 1 fois
Message édité par Arjuna le 19-11-2005 à 23:26:26
n°1249147
Arjuna
Aircraft Ident.: F-MBSD
Posté le 19-11-2005 à 23:29:31  profilanswer
 

Bon ben... je retourne à "picture.SizeMode = PictureBoxSizeMode.StretchImage;" :D

n°1249170
Arjuna
Aircraft Ident.: F-MBSD
Posté le 20-11-2005 à 00:35:23  profilanswer
 

Y'a pas à dire, ça me gave :o
 
Maintenant, le prog est terminé sauf que...
 
Ce tocard veut pas mettre à jour l'affichage :fou:
 
C'est tellement minable à ce niveau que passé 3 images à afficher, il n'en affiche que les 3 premières, et ne met plus jamais à jour l'affichage (pourtant, mes balles bougent bien, mode debug inside...)
 
Pourtant j'ai des refresh dans tous les sens, sur la form comme sur les images, mais que pouic :o
 
Doit bien y avoir un moyen de bouger une image à l'écran quand même :o


Message édité par Arjuna le 20-11-2005 à 00:36:19
n°1249247
Arjuna
Aircraft Ident.: F-MBSD
Posté le 20-11-2005 à 11:22:58  profilanswer
 

Bon... Allez, j'ai du courage aujourd'hui, je vais me lancer dans du Direct3D, c'est ce qui remplace DirectDraw maintenant à priori.
 
Après tout, c'est vrai qu'on peut faire de la 2D avec de la 3D... Tout comme on peut presser une orange au mixeur puis utiliser un filtre à café pour récupérer le jus. (qu'est-ce qu'il faut pas inventer...)

n°1249256
Arjuna
Aircraft Ident.: F-MBSD
Posté le 20-11-2005 à 12:00:45  profilanswer
 

Tiens, j'ai ENFIN trouvé un tuto clair pour apprendre le D3D.
 
A vrai dire, ça a l'air d'être des cours de fac ou autre, donc forcément, c'est détaillé et ça avance point par point (on n'as pas d'un tuto à l'autre 20 nouveaux objets dont seuls 3 sont expliqués :))
 
http://home.myuw.net/jpursell/css4 [...] s/main.htm

n°1249257
Arjuna
Aircraft Ident.: F-MBSD
Posté le 20-11-2005 à 12:03:06  profilanswer
 

y'a juste ça :

Citation :


Note To CSS Students:
If you are currently enrolled in class, please concentrate on the versions using native DirectX (with C++). In my opinion, it is very important to learn the native DirectX first. I'm putting this work here only to show you an alternative, but I don't want this stuff to interfere with your school work.


 
Mais on va dire que je suis pas étudiant en CSS et que ce truc me suffit amplement :D

n°1249268
FlorentG
Posté le 20-11-2005 à 13:04:31  profilanswer
 

Arjuna a écrit :

Et y'a que ça... Microsoft à décidé qu'il ne fallait plus dessiner en 2D :sweat:


Pour le dessin en 2D, ça se fait avec GDI+, non ?

n°1249288
Arjuna
Aircraft Ident.: F-MBSD
Posté le 20-11-2005 à 14:12:00  profilanswer
 

Chais pas ce que c'est :D
 
Mais c'est pas grave, avec D3D ça marche.
 
Niveau perfs, c'est pas terrible, mais à priori, c'est surtout mon code qui n'est pas optimisé.
 
Par contre, là j'ai un souci d'algo !
Comprends pas. Dans mon JS que j'ai fait l'autre jour, je détecte les collisions entre les balles.
Ca se traduit par une fusion des deux dans celle du plus petit index dans mon tableau, et la destruction de l'autre.
 
En théorie, ça marche, et en JS ça fait ce que je demande.
 
Sauf que là, je sais pas si ça vient de DX qui n'aime pas que je modifie des propriétés de Vertices et j'ai oublié de mettre un truc ou quoi mais... Si la seconde boule disparait bien, ben... la première aussi !
 
Et là, je sèche, je sais pas si c'est DX qui déconne ou mon algo, je trouve pas en tout cas :/
 
Et j'ai pas trouvé d'exemple DX qui permette d'ajouter/modifier/supprimer des éléments à la volée, donc je ne sais pas si c'est ce de côté qu'il manque un truc...
 
En tout cas, elles bougent, c'est déjà ça :D

n°1249304
Arjuna
Aircraft Ident.: F-MBSD
Posté le 20-11-2005 à 15:02:01  profilanswer
 

Pfff...
 
J'en ai profité pour changer le système de collision, maintenant les balles restent collées, mais j'ai un souci :D
 
Mettons un point A et un point B défini par :
 
A(xa, ya, poida, rayona)
B(xb, yb, poidb, rayonb)
 
Dist(A, B) < rayona + rayonb
 
=> Le but du jeu, c'est trouver (xa, ya) et (xb, yb) de façon à ce que Dist((xa, xb), (ya, yb)) = rayona + rayonb, en prenant le point de tangeante des deux cerles = centre de grativé de (A, B).
 
La galère, chais plus compter moi :sweat:
 
-- Edit --
 
Merde, pis c'est pas ça... Il faut que Grav(A', B') = Grav(A, B) plutôt... Avec A' et B' déplacés sur l'axe (A, B) de façon à ce que Dist(A', B') = rayona + rayonb :sweat:
(sâchant aussi qu'il faut que A' et B' restent du bon côté du centre de gravité évidement...)


Message édité par Arjuna le 20-11-2005 à 15:08:44
n°1249311
Arjuna
Aircraft Ident.: F-MBSD
Posté le 20-11-2005 à 15:28:41  profilanswer
 

T'ain, j'ai la tête dans le cul, j'arrive rien à trouver comme formule :/

n°1249364
Arjuna
Aircraft Ident.: F-MBSD
Posté le 20-11-2005 à 16:51:05  profilanswer
 

J'ai mon D3D qui se dessine dans un contrôle de la fenêtre... Je fais comment pour le redimensionner ? Parceque ça plante méchamment si je redimensionne le contrôle :D

n°1249368
Arjuna
Aircraft Ident.: F-MBSD
Posté le 20-11-2005 à 16:54:49  profilanswer
 

Trouvaid ! Faut juste réinitialiser la 3D :)

n°1249463
moi23372
Posté le 20-11-2005 à 21:20:13  profilanswer
 

pour des modifications d'image dans GDI+, pour qu'il en tienne compte
appele la méthode "invalidate()"
 
sinon aucune modification serait faite... désolé du retard... je suis kazi certain qu'avec ça ça fais ce que tu veux... enfin bon... voila bonne chance dans directx


Message édité par moi23372 le 20-11-2005 à 21:22:26
n°1249467
Arjuna
Aircraft Ident.: F-MBSD
Posté le 20-11-2005 à 21:34:18  profilanswer
 

Là il me reste plus qu'à trouver comment on se sert de la molette de la souris en C# et vais pouvoir vous montrer mon super chef d'oeuvre :love: :D

n°1256085
_Mose_
Lonesome coder
Posté le 30-11-2005 à 15:48:03  profilanswer
 

Arjuna a écrit :

Là il me reste plus qu'à trouver comment on se sert de la molette de la souris en C# et vais pouvoir vous montrer mon super chef d'oeuvre :love: :D

T'as une méthode OnMouseWheel sur tous les contrôles Winform. Mais je sais pas si tu en utilise :)
Sinon c'est résolu ton pb avec les int et les doubles ? Pask'en fait, en C# pour déclarer un flottant, faut l'écrire avec un 'f' après.
Ex : 4f / 3f.
L'opérateur '/' verra que les deux paramètres sont des flottants, il fera une division flottante (beaucoup plus lourde que la division entière).

n°1256098
Arjuna
Aircraft Ident.: F-MBSD
Posté le 30-11-2005 à 16:02:22  profilanswer
 

En effet, tous les problèmes de ce topic sont résolus à ce jour (mise à par la molette qui déconne).
 
En effet, il faut tourner une demi-heure la molette pour que ça fasse quelquechose... et ça bouge d'autant que la molette a été bougée !
 
Pas bien compris d'où ça venait, mais à priori, c'est plus mon programme qui déconne qu'autrechose (y'a notamment une belle fuite mémoire, au bout de 5 minutes d'utilisation, le prog utilise 3 Go de RAM :D)

n°1256189
_Mose_
Lonesome coder
Posté le 30-11-2005 à 17:18:46  profilanswer
 

Oulala !!  Pas mal :)
C'est ptet pour ça qu'elle déconne la molette : ça doit swapper à mort...

n°1256538
Arjuna
Aircraft Ident.: F-MBSD
Posté le 01-12-2005 à 00:01:40  profilanswer
 

D'est le souci de D3D... La lib pour .NET est censée être managed, mais visiblement ils ont chié un truc dans le nettoyage de la mémoire :D
 
Et à un moment, je crée une chiée d'objets à chaque passage dans une boucle de render, et je me demande si à la sortie il sait bien les détruire comme un grand :D

n°1256540
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 01-12-2005 à 00:07:38  profilanswer
 

Arjuna a écrit :


Et à un moment, je crée une chiée d'objets à chaque passage dans une boucle de render, et je me demande si à la sortie il sait bien les détruire comme un grand :D


Ben alors, tu voles plus ? Ca fait un bail que je t'ai pas croisé à FL350 :D
Sinon j'ai réinstallé mon FS2004, ça va bcp mieux, adieu plantages :)
</HS>
Pour tes objets, si tu veux être sur qu'ils soient détruits, tu fais un petit coup de Dispose() quand t'en as plus besoin (sans oublier le GC.SuppressFinalize() qui va avec, pour dire au GC de ne pas virer les références à ces objets, vu qu'ils n'existent plus)


Message édité par Harkonnen le 01-12-2005 à 00:08:07

---------------
J'ai un string dans l'array (Paris Hilton)
n°1256554
Arjuna
Aircraft Ident.: F-MBSD
Posté le 01-12-2005 à 01:08:12  profilanswer
 

En effet, je vais regarder ça :)
 
<hs> En effet, j'ai pas volé depuis un moment, pas mal de trucs à faire au taff en ce moment et des soucis familiaux... Et même plus le temps de rien faire en ce moment... </hs>

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Créer un contrôle dans une Form depuis un objet ?

 

Sujets relatifs
vba créer les propriétés d'un commandbutton en automatiqueVBA-ACCESS - insert objet dans fichier Excel
pb résolu: créer un lien hypertextY a vraiment personne qui peut m'aider à créer au moins un TRIGGER ?
Besoin d'aide pour créer des déclencheurs[access] comment creer une table avec en parametre le nom de la table?
Content-type à partir d'un objet Image ?[VBA Excel] Concaténation pour retrouver un contrôle
[interbase/SL]besoin d'aide pour creer un triggercontrôle d'intégrité dans une requêtte d'ajout sous Access 2002
Plus de sujets relatifs à : Créer un contrôle dans une Form depuis un objet ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR