Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [C#] Registrazione degli eventi
Forum - C# / VB.NET - [C#] Registrazione degli eventi

Avatar
nihal (Ex-Member)
Pro


Messaggi: 109
Iscritto: 12/04/2010

Segnala al moderatore
Postato alle 13:09
Sabato, 06/11/2010
Questo topic è stato chiuso dal moderatore

Salve a tutti,
avrei bisogno di una mano con questo codice "casalingo":
Codice sorgente - presumibilmente C#

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Windows.Forms;
  5. using System.IO;
  6.  
  7. namespace Periodic
  8. {
  9.         public partial class PeriodicGUI : Form
  10.         {
  11.                 private List<Elemento> elementi;
  12.                 private TableLayoutPanel layout;
  13.                 private StreamReader file;
  14.                 public PeriodicGUI(){
  15.                         layout = new TableLayoutPanel();
  16.                         elementi = new List<Elemento>(103);
  17.                         file = new StreamReader("C:\\Documents and Settings\\Nihal\\Documenti\\SharpDevelop Projects\\Periodic\\Periodic\\Elementi.dat");
  18.                         string linea;
  19.                         while((linea = file.ReadLine()) != null){
  20.                                 string[] campi = linea.Split(',');
  21.                                 elementi.Add(new Elemento(campi[0], campi[1], campi[2], campi[3], campi[4], campi[5], campi[6]));
  22.                                 System.Console.WriteLine("Aggiunto elemento");
  23.                         }
  24.                         for(int riga = 0, colonna = 0, i = 0; i < elementi.Count ; i++, colonna++){
  25.                                 if(riga == 0 && colonna == 1)
  26.                                 {
  27.                                 colonna = 17;
  28.                                 } else if (riga == 1 && colonna == 2)
  29.                                 {
  30.                                 colonna = 12;
  31.                                 } else if (riga == 2 && colonna == 2)
  32.                                 {
  33.                                 colonna = 12;
  34.                                 } else if (riga == 6 && colonna == 3)
  35.                                 {
  36.                                 riga = 7;
  37.                                 colonna = 4;
  38.                                 } else if (riga == 7 && colonna == 18)
  39.                                 {
  40.                                         riga = 8;
  41.                                 colonna = 4;
  42.                                 }
  43.                                 if (colonna == 18)
  44.                                 {
  45.                                 riga++;
  46.                                 colonna = 0;
  47.                                 }
  48.                                 layout.Controls.Add(elementi[i], colonna, riga);
  49.                         }
  50.                         //WebBrowser label1 = new WebBrowser();
  51.                         //label1.DocumentText = "<html style=\"background-color: " + "red" + ";\"><body><div style=\"text-align : left; font-size : small\">" + "10" + "</div><div style=\"font-size : medium; text-align : left\">" + "Ne" + "</div></body></html>";
  52.                         //label1.Size = new Size(100, 100);
  53.                         //layout.Controls.Add(label1, 1, 2);
  54.                         this.Controls.Add(layout);
  55. //                      foreach(Control controllo in this.Controls){
  56. //                              if (controllo is TableLayoutPanel){
  57. //                                      continue;
  58. //                              } else {
  59. //                                      controllo.Dispose();
  60. //                              }
  61. //                      }
  62.                         foreach (Elemento elemento in this.layout.Controls){
  63.                                 elemento.MouseEnter += new EventHandler(this.Elemento_MouseHover);
  64.                                 elemento.MouseClick += new MouseEventHandler(this.Elemento_Click);
  65.                         }
  66.                         this.WindowState = FormWindowState.Maximized;
  67.                         this.Dock = DockStyle.Fill;
  68.                         this.layout.Size = new Size(2000, 1500);
  69.                         layout.Show();
  70.                         InitializeComponent();
  71.                         this.Show();
  72.                 }
  73.                 void Elemento_Click(object sender, EventArgs e)
  74.                 {
  75.                         new InfoElemento((Elemento)sender).Show();
  76.                 }
  77.  
  78.                 void Elemento_MouseHover(object sender, EventArgs e)
  79.                 {
  80.                         Elemento sendeR = (Elemento)sender;
  81.                         sendeR.BackColor = Elemento.coloreHover;
  82.                 }
  83.         }
  84. }


Il programma viene compilato e avviato senza nessun problema (è una tavola periodica in cui ogni casella è rappresentata da una classe che eredita da Control) e tutto è come dovrebbe essere. L'unica questione è sugli eventi: ho iterato su tutti gli elementi e ad ognuno di questi ho aggiunto un gestore per l'evento Click e MouseHover (rispettivamente Elemento_Click e Elemento_MouseHover), ma semplicemente quando ci passo sopra col mouse o ci clicco non succede niente, come se gli eventi non fossero gestiti. Idee? Forse devo ridefinire qualcosa ereditando da Control?


Chi lotta può perdere. Chi non lotta ha già perso...
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
1
Down
V
Segnala al moderatore
Postato alle 17:27
Sabato, 06/11/2010
Dipende da che tipo è Elemento. Se usi un controllo utente, gli eventi mousehover e click potrebbero (e dico potrebbero) non avere molta influenza, a favore invece degli stessi eventi lanciati, però, dai controlli interni al controllo utente. Ti suggerisco, quindi di provare a gestire MouseHover e Click all'interno dell'user control e in base a questi di scatenare degli ulteriori eventi propri, gestiti invece dal form1 (ad esempio Elemento.InfoRequired).


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM
Avatar
nihal (Ex-Member)
Pro


Messaggi: 109
Iscritto: 12/04/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 18:13
Sabato, 06/11/2010
La classe Elemento eredita da Control e non è altro che una coppia di label di dimensioni prefissate con uno sfondo definito da me. Quindi tu dici che dovrei far lanciare gli eventi da ognuna delle label e farli gestire direttamente dalla classe Elemento?

EDIT:
Ho aggiunto i gestori direttamente ai controlli interni e ne ho adattato le dimensioni per riempire tutto il Control. Adesso funziona tutto bene, grazie Totem :):):)

Ultima modifica effettuata da nihal il 06/11/2010 alle 19:01


Chi lotta può perdere. Chi non lotta ha già perso...
PM