IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Passer une form a un control ( erreur CS0119) ? [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 412
    Par défaut Passer une form a un control ( erreur CS0119) ?
    Bonjours,


    Il s'agis d'un button, crée dans une classe séparée (vu la quantité je peux pas passer par le desingner)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    using System;
    using System.Drawing;
    using System.Windows.Forms;
     
    /*
     usage CButton But0 = new (this,"Welcome"); 
     */
    namespace CustomItemButton
    {
        public class CButton : Button
        {
            private Form SrcForm;
            private Button But;
     
     
            //constructeur
            public CButton(Form SForm, string Name, string Text = "", 
                                    int PosH = 0, int PosV = 0 , 
                                    int LenV = 200, int LenH = 50, 
                                    string FontName = "Times New Roman", 
                                    float SizeFont = 16)
            {
                //ça miaule donc methode ? (Rendre le champ readonly):-> But = new Button();
                NewButton();
                SetForm(SForm);
                //default
                But.Name = Name;
                SrcForm.Controls.Add(But);
                But.BackColor = Color.FromArgb(0, 0, 0);
                But.ForeColor = Color.FromArgb(0, 255, 00);
                But.Text = Text;
                But.Font = new Font(FontName, SizeFont);
                But.FlatStyle = FlatStyle.Popup;
                But.Location = new Point(PosH, PosV);
                But.Height = LenH;
                But.Width = LenV;
     
                //association
                But.Click += new System.EventHandler(But_DoubleClick);
            }
            private void NewButton()
            {
                But = new Button();
            }
            private void SetForm(Form SForm)
            {
                SrcForm = SForm;
            }
            public override String Text
            {
                get { return But.Text; }
                set { But.Text = value; }
            }
     
            private void But_DoubleClick(Object sender, EventArgs e)
            {
                //SrcForm.Text = But.Text;//a adapter
                //SrcForm.Text=SrcForm.t;
                if ( But.Name == "StartStopThreadDNS" )
                {
                    // methode introuvable ???
                    // SrcForm.StartStopTreadCleanDns(true);
     
                }
            }
        }
    }
    /* memo
        * public event EventHandler DoubleClick;
        * public event EventHandler ThresholdReached;
        *
    */

    Je comptait donc mettre dans la form1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    using System.Windows.Forms;
    using CustomItemButton;
    using MyThread;
     
    namespace DnsClean
    {
     
        public partial class Form1 : Form
        {
    		//Creation du boutton personaliser
    		CButton But0 = new ( this, "StartStopThreadDNS", "Start clean DNS");
    		//Affectation de l'instance pour un usage local.
    		FBut0 = But0;
     
    		public Form1()
    		{
     
    			InitializeComponent()
     
    			CButton But0 = new ( this, "StartStopThreadDNS", "Start clean DNS");
    			FBut0 = But0;
    		}
     
     
    		public void StartStopTreadCleanDns(bool start)
                  {
    			//methode inconnue par le button ??
                  }
    	}
     
    }

    Dans le button la methode StartStopTreadCleanDns est inaccessible, qui est pour temps public

    j'ai bien tenter de passer la form avec le mots clef "ref " mai j'obtiens l'erreur ( CS0119 'Form1' est un type, qui n'est pas valide dans le contexte donné)

    Donc je lui passe un type déclarer il me semble correctement.

    la doc de microsoft: https://docs.microsoft.com/fr-fr/dot...rp/misc/cs0119

    J'ai bien tenter un Form.Form1 mai c est pas sa non plus. donc comment est-ce qu'on fait ??

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 440
    Par défaut
    Bonjour,
    Tu passes en paramètre un objet de type Form, qui n'implémente pas la procédure en question.
    Il faut "caster" ton paramètre pour qu'il soit de type Form1:
    (de mémoire)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (Form1)SrcForm.StartStopTreadCleanDns(true);
    Plus d'infos .

    Tatayo.

  3. #3
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Lorsqu'on créé un composant c'est dans l'optique de le réutiliser.
    Là, tu es en train de créer un composant et la première chose que tu fais dedans c'est de le lier fortement à un écran en particulier et en plus à une action particulière.
    C'est un non sens !

    Tu peux créer un composant si tu veux mais cela n'est pas nécessaire pour le problème que tu as posté ici :
    https://www.developpez.net/forums/d2...ns-procedures/

    Mais surtout, n'y fourre pas un comportement propre à un écran et une action particulière.
    Créer ton bouton depuis ton écran.
    Branche y un gestionnaire OnClick depuis ton écran
    Appelle la méthode StartStopTreadCleanDns de ton écran depuis ton écran

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 412
    Par défaut
    j'ai répondu et dit clairement merci, mai le poste a été supprimer.....
    Du coup je suis forcer de mettre en résolut sans autre commentaire

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Dessiner une forme et l'animer:erreur 1004
    Par Donville dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/03/2013, 09h47
  2. Passer une variable d'un Controller à un View
    Par Alabama-song dans le forum MVC
    Réponses: 2
    Dernier message: 15/09/2011, 10h47
  3. passer une chaine et un control en paramètre (en même temps)
    Par hi-wave dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/04/2011, 17h14
  4. Passer une form en parametre
    Par Microturnip dans le forum VB.NET
    Réponses: 9
    Dernier message: 05/05/2008, 21h20
  5. passer une form a une fonction
    Par LeXo dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 27/12/2006, 14h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo