2013-03-28 8 views
0

J'ai créé une méthode dans mon application qui crée un certain nombre de panneaux lors de l'exécution. Dans la boucle qui crée les panneaux, j'ai créé un événement MouseMove de panneau qui contrôle la position d'une info-bulle basée sur la position du pointeur de la souris dans l'un des panneaux créés. Je reçois cette erreur quand je compile, j'apprécie que pnlOverview est une création dans un constructeur différent, mais pour la vie de moi, je ne peux pas comprendre comment je peux atteindre l'instance pnlOverview à partir du gestionnaire d'événements.Le nom n'existe pas dans le contexte actuel

Quelqu'un peut-il me diriger dans la bonne direction?

est ici juste le code que je pense que vous devez regarder:

public void CreatePanels() 
    { 
     int PanelPosX = 50; 
     int PanelPosY = 500; 
     int LabelPosX = 10; 
     int LabelPosY = 10; 

     for (int i = 0; i < (Convert.ToInt32(txtNoOfPanels.Text)); i++) 
     { 
      // Create a new panel, each with a unique label identifying the inspector 

      Panel pnlOverview = new Panel(); 
      pnlOverview.Name = "InspectorPanel" + (i + 1).ToString(); 
      pnlOverview.Text = "Inspector Panel " + (i+1).ToString(); 
      pnlOverview.Location = new Point(PanelPosX, PanelPosY); 
      pnlOverview.Size = new Size(1200, 180); 
      pnlOverview.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 
      Controls.Add(pnlOverview); 
      pnlOverview.Paint += new PaintEventHandler(newPanelPaint); 

      // Create a MouseMove event for each panel created 
      pnlOverview.MouseMove += new MouseEventHandler(pnlOverview_OnMouseMove); 

      Label lblInspectorName = new Label(); 
      lblInspectorName.Name = "InspectorName" + (i+1).ToString(); 
      lblInspectorName.Text = " Inspector " + (i+1).ToString(); 
      lblInspectorName.Width = 100; 
      lblInspectorName.Height = 13; 
      lblInspectorName.Location = new Point(LabelPosX, LabelPosY); 
      lblInspectorName.Size = new Size(82, 13); 
      pnlOverview.Controls.Add(lblInspectorName); 

      PanelPosY += 190; 
     } 
     return; 
    } 

    // Show a tooltip 
    public void pnlOverview_OnMouseMove(object sender, MouseEventArgs e) 
    { 
     toolTip1.Show("HELLO", this, new Point(pnlOverview.Left + e.X + 1, pnlOverview.Top + e.Y + 1), int.MaxValue); 
    } 
+1

Quelle langue/quel compilateur? –

+0

@Dan Pichelman: Ceci est C#. Mais quelle version de Visual Studio utilisez-vous? – izogfif

+0

On dirait que C# pour moi, mais c'est évidemment une supposition. Si c'est vrai, je recommande d'utiliser le FlowLayoutPanel au lieu d'essayer de positionner vos éléments manuellement. –

Répondre

1

pnlOverview ne sera pas portée dans votre gestionnaire MouseMove, car il est une variable locale dans CreatePanels().

sender doit être le contrôle que vous supprimez, mais vous devez le convertir au type approprié.

+0

Merci à tous. Ça m'a pris un peu de temps mais je dois le faire fonctionner. –

+0

Personne ici ne veut vraiment dire comment déclarer un contrôle pour qu'il soit accessible dans un autre événement? –

Questions connexes