Problème d'instanciation...

Signaler
Messages postés
7
Date d'inscription
vendredi 10 décembre 2004
Statut
Membre
Dernière intervention
10 novembre 2005
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
Salut à tous !

Bon, j'annonce la couleur en signalant que je suis un grooos noob en C#. La 1ere fois que j'y ai touché, c'était lundi ^^



J'ai une fenêtre qui appelle une fenêtre de connexion à une base MySQL.
Pour ça j'utilise un driver ODBC. Le truc c'est qu'il faut que je passe
l'objet OdbcConnection de la fenêtre apelée à la fenêtre appelante.
Pour faire ça, j'ai compris le principe. Mon souci est dans l'accesseur
de la fenêtre appelante. Pour que vous compreniez, voici mon code :



Pour commencer, déclarations de ma fenêtre :

using System;

using System.Drawing;

using System.Windows.Forms;

using System.Data.Odbc;



namespace TestsAppli1

{

/// <summary>

/// Description of MainForm.

/// </summary>

public class MainForm : System.Windows.Forms.Form

{

private System.Windows.Forms.MainMenu mainMenu1;

private System.Windows.Forms.Panel panel1;

private System.Windows.Forms.Splitter splitter1;

private System.Timers.Timer timer1;

private System.Windows.Forms.MenuItem menuItem3;

private System.Windows.Forms.TreeView treeView1;

private System.Windows.Forms.MenuItem menuItem2;

private System.Windows.Forms.MenuItem menuItem1;

private System.Windows.Forms.StatusBar statusBar1;

private OdbcConnection maConnexion;



public MainForm()

{ .......



Ensuite, voilà mon accesseur :

public void SetConnexion(OdbcConnection laConnexion)

{

maConnexion = new OdbcConnection (laConnexion);

}



J'accède a celui-ci depuis ma fenêtre appelée avec :

((MainForm)Parent).SetConnexion(maConnexion);



En n'oubliant pas de définir la fenêtre principale comme parent à l'ouverture de la fenêtre.



Théoriquement, ça devrait fonctionner. Mais (parce qu'il y a toujours
un mais ^^), j'ai une #@!';é& d'erreur à la compilation :

"'System.Data.Odbc.OdbcConnection.OdbcConnection(System.Data.Odbc.OdbcConnexion)'
est inaccessible en raison de son niveau de protection(CS0122)".

Cette erreur concerne la ligne 199 de ma fenêtre principale (MainForm),
soit la création de l'objet OdbcConnction dans l'accesseur (
maConnexion = new OdbcConnection(laConnexion);).



Ce qui est bizarre, c'est que si je met le même code dans le constructeur, ça marche.



D'où peut bien venir cette erreur ? (je rappelle que je suis débutant en C# ^^)



Merci à tous :)

3 réponses

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
public void SetConnexion(OdbcConnection laConnexion)
{
maConnexion = laConnexion;
}

ça devrait fonctionner nettement mieux.

Sébastien FERRAND
[MVP C#]
Messages postés
7
Date d'inscription
vendredi 10 décembre 2004
Statut
Membre
Dernière intervention
10 novembre 2005

Merci pour ta réponse. Je n'ai plus d'erreur à la compilation. Mais
maintenant, j'ai une erreur à l'exécution concernant la ligne ou
j'affecte le parent de la fenêtre appelée. Voici le code :

void MenuItem2Click(object sender, System.EventArgs e)

{

Connexion dlg = new Connexion();

dlg.Parent = this;

dlg.ShowDialog();

}

Et l'erreur est la suivante :



System.ArgumentException: Impossible d'ajouter un contrôle de premier niveau à un contrôle.



Si je met dlg.Parent = this; en commentaires je n'ai plus cette erreur, mais je ne peux pas appeler l'accesseur public void SetConnexion(OdbcConnection laConnexion) depuis la fenêtre appelée ( ((MainForm)Parent).SetConnexion(maConnexion);
ne marche pas : j'ai une erreur : System.NullReferenceException: La
référence d'objet n'est pas définie à une instance d'un objet.)



Une idée ?



Merci pour vos réponses ^^
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
Salut,

La propriété Parent sert à définir le contrôle conteneur d'un contrôle, hors Form est un contrôle de premier niveau, ce qui signifie en gros qu'il ne peut pas être contenu par un autre conteneur.
Pour faire ce que tu veux sert toi plutôt de la propriété Owner ou Tag

/*
coq
MVP Visual C#
*/