Problème Références d'une WebForm

Résolu
oximoron Messages postés 149 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 30 janvier 2009 - 9 févr. 2005 à 17:49
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 - 10 févr. 2005 à 03:39
Bonjour,
J'ai un petit problème en asp.net (c#), j'ai une classe qui gère une ligne (c'est un exemple) que voici :

class CMaLigne
{
private int m_nX1; private int m_nY1;
private int m_nX2; private int m_nY2;

public CMaLigne();
{
m_nX1=1; m_nY1=1; m_nX2=100; m_nY2=100;
}
public TestTailleImage()
{
//l'image est la zone ou je veux dessiner
int nLongImg=Convert.ToInt16(Image1.Width.Value);
int nLongImg=Convert.ToInt16(Image1.Height.Value);
}
}

Voila ca ne marche pas quand je veut recupérer le taille de mon image, Image1 n'est pas reconnu dans la classe mais si je le met par exemple dans l'événement OnLoad de la page, ca marche. J'ai une erreur à la compilation qui parle d'une mauvaise réference.

WebForm1.Image1.Width.Value ne marche pas nont plus, je ne sias plus quoi faire.
Si quelqu'un peut m'aider à résoudre ce petit problème. Merci d'avance.

oximoron

5 réponses

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
10 févr. 2005 à 00:41
C'est normal qu'il y ait une erreur, Image1 est déclaré nul part en
plus quel est le type de TestTailleImage ?elle sert à quoi cette
fonction ? elle t'initialie deux variables et puis hop, terminé j'espere plutot que tu n'as pas mis la fin du code



Pour arriver à recuperer Image1 sans le passer en paramètre il faudrais
utiliser la reflection, et encore je suis pas sur que ce soit possible.
Si tu veux te servir de Image1 dans ton code, il faut le passer, soit
par reference si tu veux le modifier soit par valeur si tu veux juste
une copie (ByRef ou Byval en VB en C# aucune idée)



donc fait un truc comme ca.



class CMaLigne

{

private Point m_n1;

private Point m_n2;

private ImageButton Image1;



public CMaLigne(ImageButton image1)

{

Image1 = image1;

m_n1.X 1; m_n1.Y 1 ;

m_n2.X 100 ; m_n2.Y 100;

}

public void TestTailleImage()

{ //l'image est la zone ou je veux dessiner

int nLongImg=Convert.ToInt16(Image1.Width.Value);

int nHautImg=Convert.ToInt16(Image1.Height.Value);

}

}



J'ai pris la liberté de remplacer tes quatres int par deux Point, ce type la est fait pour ce genre de chose


<hr>

Cyril - http://Hoshimi.CodeS-SourceS.fr
3
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
9 févr. 2005 à 21:20
Je comprend ton erreur, mais pour te l'expliquer et resoudre le problème j'aurais besoin de plus d'info sur ton code.



En gros cela vient de la structure des pages, si tu construit ta classe
dans le page_init, c'est evident que ca plante, car le controle sera
pas encore instancié, par contre dans le page_load il n'y aura pas
d'erreur car ton image existera.

<hr>

Cyril - http://Hoshimi.CodeS-SourceS.fr
0
oximoron Messages postés 149 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 30 janvier 2009
10 févr. 2005 à 00:14
Déjà merci de m'avoir répondu. Donc voila mon code avec un peu plus de détail : (et avec quelques fautes de frappes en moins...) J'ai essayé de mettre ma classe à plusieurs endroits, et c'est toujours pareil ...


using System;
...

namespace MonProjet
{

public
class WebForm1 : System.Web.UI.Page
{

protected System.Web.UI.WebControls.ImageButton Image1;


private
void Page_Load(
object sender, System.EventArgs e)
{
// Placer ici le code utilisateur pour initialiser la page
}

#region Web Form Designer generated code


override
protected
void OnInit(EventArgs e)
{
// CODEGEN : Cet appel est requis par le Concepteur Web Form ASP.NET.
InitializeComponent();

base.OnInit(e);
}

private
void InitializeComponent()
{

this.Image1.Click +=
new System.Web.UI.ImageClickEventHandler(
this.Image1_Click);

this.Load +=
new System.EventHandler(
this.Page_Load);
}

#endregion

class CMaLigne
{

private
int m_nX1;
private
int m_nY1;

private
int m_nX2;
private
int m_nY2;

public CMaLigne()
{
m_nX1=1; m_nY1=1; m_nX2=100; m_nY2=100;
}

public TestTailleImage()
{
//l'image est la zone ou je veux dessiner
int nLongImg=Convert.ToInt16(Image1.Width.Value);

int nHautImg=Convert.ToInt16(Image1.Height.Value);
}
}

private
void Image1_Click(
object sender, System.EventArgs e)
{ //ici ca marche

int nLongImg=Convert.ToInt16(Image1.Width.Value);

int nHautImg=Convert.ToInt16(Image1.Height.Value);
}
}
}



Merci encore.
oximoron
0
oximoron Messages postés 149 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 30 janvier 2009
10 févr. 2005 à 01:52
Merci, ca marche enfin, j'avais pas pensé à passer les contrôles en paramètres et mes toutes petites notions de MFC m'on embrouilé car là, on récupère un pointeur sur la feuille pour ecrire dessus... bref ca marche mais (ce n'est pas mon cas ) si on à plein de contrôles faudra passer plein de contrôles en paramètres ? Ca risque d'être long non ?
Sinon, pour ma fonction bien sur qu'elle fait autre chose mais je ne voulais pas mettre des lignes de codes fonctionnelles. Pour la class point tu as parfaitment raison, je l' avais au début mais je l'ai supprimé pour bien identifier mon (ex)problème, et c'est aussi cette simplificattion qui m'a fait oublié le petit void devant TestTailleImage().

Je te remercie vivement pour cette aide prècise est rapide, Merci beaucoup.
oximoron
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
10 févr. 2005 à 03:39
oui si tu as plein de controles tu devrais en théorie passer tout les controles



mais dans ce cas la solution est carrement de passer la page en paramètre

<hr>

Cyril - http://Hoshimi.CodeS-SourceS.fr
0
Rejoignez-nous