Appel de méthode dans le constructeur de classe

Résolu
geii82 Messages postés 25 Date d'inscription mardi 18 avril 2006 Statut Membre Dernière intervention 26 mai 2006 - 5 mai 2006 à 15:12
geii82 Messages postés 25 Date d'inscription mardi 18 avril 2006 Statut Membre Dernière intervention 26 mai 2006 - 5 mai 2006 à 17:08
Bonjour à tous, je viens d'écumer le web et ce forum, et je ne trouve pas la réponse à mon problème sûrement parceque il est trop simple ! Je suis en train de réaliser ces cours : http://www.labo-dotnet.com/Articles/Mobile/SQL%20Server%20CE,%20DataGrid%20et%20DataSet/Cr%C3%A9ation%20d%E2%80%99une%20base%20de%20donn%C3%A9es%20et%20de%20tables/0/1492.aspx
et il est dit : "l vous suffit d'appeler cette méthode dans le constructeur de votre classe"

oO ?? ue ce la signifie t'il ?
j'ai essayé :

namespace c_1_1
{
/// <summary>
/// Summary description for form.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
/// <summary>
/// Main menu for the form.
/// </summary>
private System.Windows.Forms.MainMenu mainMenu1;

public Form1()
{
InitializeComponent();
}

/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
}

#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.mainMenu1 = new System.Windows.Forms.MainMenu();
this.Menu = this.mainMenu1;

this.Text = "Form1";
}

#endregion

/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main()
{
Application.Run(new Form1());
CréerBaseDeDonnées();

}

void CréerBaseDeDonnées()
{
if (System.IO.File.Exists("BandeDessinée.sdf") == false)
{ SqlCeEngine engine new SqlCeEngine("Data source BandeDessinée.sdf");
engine.CreateDatabase();
engine.Dispose();
}
}

...

L'erreur est : An object reference is required for the nonstatic field méthod, or property : c1_1.form1.CréerBaseDeDonnées();

Voila J'espère que vous pourrez m'aider ! Quelle est l'erreur ?

Merci

3 réponses

zebobo5 Messages postés 273 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 6 février 2009 1
5 mai 2006 à 15:47
Salut,

le constructeur de ta class Form1 est :
public Form1()
{
InitializeComponent();
}

et le :
static void Main()
{
...
}
C'est le point d'entré de ton programme...
Ta méthode ici, ne s'executera que l'orsque ton Application.Run(..) sera terminé, c'est à dire quand tu aura ici fermé ta form1.

<hr>ZeBobo5http://blogs.msdn.com/zebobo5/
N'oubliez pas de cloturer votre post.
3
dgouttegattat Messages postés 129 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 30 décembre 2007 3
5 mai 2006 à 15:56
Bonjour,

Le premier problème, ici, n'est pas que CréerBaseDeDonnées est appelée après Application.Run(...), mais que cette méthode n'est pas statique, donc tu ne peux pas l'appeler dans Main (méthode statique) sans disposer d'une instance.


Donc, soit tu déplace l'appel à CréerBaseDeDonnées dans le constructeur de la classe (comme te le conseille ZeBobo5), soit tu changes le code de Main pour qu'il ressemble à cela :



<HR>
Form1 form = new Form1();
form.CréerBaseDeDonnées();
Application.Run(form);
<HR>

Tu peux également faire de CréerBaseDeDonnées une méthode statique, puisque apparemment elle n'accède jamais à des membres d'instance.
3
geii82 Messages postés 25 Date d'inscription mardi 18 avril 2006 Statut Membre Dernière intervention 26 mai 2006
5 mai 2006 à 17:08
Merci à vous j'ai fais l'appel de mes fonctions dans :

public Form1()
{
InitializeComponent();
ici
}

MErci beaucoup ! Cela fais 3 semaines que j'essaye de créer tes tables vaec du code :)
Il suffit juste que j'y arrive en Vb.Net CF2.0 pasque la c'est du CF1.0 :)
0
Rejoignez-nous