Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [C#] Gestire oggetti form

    Salve a tutti,
    Sono alle prime armi con il C# e ho un problema che mi tormenta:

    Attualmente ho un form dove ho inserito un po' di pulsanti, label e listBox.
    Non riesco a scrivere dentro alla listBox da un file diverso da Form1.cs (file creato dall'ambiente), mi spiego meglio(spero) all'interno del mio progetto ho creato un file.cs
    dove ho inserito:

    namespace FirstApp // uguale per tutti i file di progetto
    {
    public partial class Form1 // dichiarazione classe uguale a Form1.cs
    {
    public void Init() // questa funzione viene chiamata dall'evento di un pulsante
    {
    label1.Text = "Ciao"; // l'istruzione viene eseguita (verificato con un breakpoint)
    // ma sul Form non mi appare nulla!
    // Mentre effettuando la stessa operazione nel file
    // Form1.cs mi appare correttamente la scritta sul form.
    }
    }
    }
    Secondo il compilatore la sintassi è giusta, questo vale anche per la gestione di una listBox.
    Ma allora dove sbaglio?

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    Prima di tutto leggiti il regolamento.. ed utilizza i tag code per postare il codice..

    Quindi se quel metodo lo inserisci sul form1.cs va tutto liscio se lo metti nel file.cs non va?

  3. #3
    A Stoicenko:

    Scusa ma sono nuovo nel forum, non sapevo della presenza dei tag code.

    Esattamente, quando il metodo è nel file.cs non mi stampa la stringa sulla label...

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da Axl82
    Non riesco a scrivere dentro alla listBox da un file diverso da Form1.cs (file creato dall'ambiente), mi spiego meglio(spero) all'interno del mio progetto ho creato un file.cs
    dove ho inserito
    Mi sembra un problema, ma anche una impostazione di progetto, più che strana.

    Posta maggiori dettagli sui file che compongono la tua soluzione, magari uno screenshot se sono pochi, e sul loro contenuto.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Il problema potrebbe essere proprio nel nome del metodo che hai scelto per inizializzare i valori dei vari controlli.

    Fai attenzione perchè il metodo Init è ereditato dalla classe System.Web.UI.Control se non sbaglio. Controlla quanto di ho detto se puoi, quindi prova a cambiare il nome del metodo

    Spero possa esserti utile

  6. #6
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    Originariamente inviato da RoBYCoNTe
    Il problema potrebbe essere proprio nel nome del metodo che hai scelto per inizializzare i valori dei vari controlli.

    Fai attenzione perchè il metodo Init è ereditato dalla classe System.Web.UI.Control se non sbaglio.
    infatti sbagli! perchè quel namespace non c'èntra niente con windows forms
    I got the remedy

  7. #7
    ahahhaha, oddio Albgen inizio a pensare che da te ho molto da imparare, cmq scusate, io davo per scontanto che stessimo parlando di "web.form" chiedo scusa.

  8. #8
    Eccovi nel dettaglio i 3 files del progetto incriminato:

    File Program.cs:
    codice:
    namespace FirstApp
    {
        public class Program
        {
            
            /// <summary>
            /// Punto di ingresso principale dell'applicazione.
            ///     
            [STAThread]        
            public static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Form1 NewFile = new Form1();
                NewFile.Init();
                Application.Run(new Form1());            
            }
        }   
    }
    File Form1.cs:
    codice:
    namespace FirstApp
    {
        public partial class Form1 : Form
        {
            byte tmp;
            string path = @"E:\SrcSoftware\C#\FirstApp\Sun.bmp";
                   
            public Form1()
            {
                InitializeComponent();     
            }
    
            private void button1_Click(object sender, EventArgs e)
            {                
                string data = ">Ciao";
                WriteCharOnCom1(data);
                listBox1.Items.Add(data); // Questa viene stampata correttamente
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                label1.Text = "";
                listBox1.Items.Clear();
                listBox2.Items.Clear();
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                // Per test Timer, questa parte è funzionante
                if ((++progressBar1.Value) >= 100)
                    progressBar1.Value = 0;
                //       
    
                if (tmp == 1)
                {
                    tmp = 0;
                    pictureBox1.Image = null;
                   
                }
                else
                {
                    tmp = 1;
                    pictureBox1.Image = Image.FromFile(path);            
                }
            }  
         }
    }
    File New.cs:
    codice:
    namespace FirstApp
    {
        public partial class Form1
        {
            public string buffRx;
            static SerialPort port = new SerialPort();
            private SerialDataReceivedEventHandler SerialDataReceivedEventHandler1;
    
            // Init serial com port e smsp data
            public void Init()
            {
                // Instantiate the communications  // port with some basic settings
                port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);            
                SerialDataReceivedEventHandler1 = new SerialDataReceivedEventHandler(DataReceived);
                port.DataReceived += SerialDataReceivedEventHandler1;
                port.Open();                        
                label1.Text = "Init"; // Questa NON viene stampata sulla label nel Form
            }        
         
            // Event to receive data from com port
            public void DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                buffRx = null;
                buffRx = port.ReadExisting();
                listBox2.Items.Add(buffRx); // Questa NON viene stampata sulla listBox2 nel Form      
            }
          
            public void WriteCharOnCom1(string ch)
            {        
                port.Write(ch);
            }
        }   
    }
    Come vedrete dai commenti in due punti nel file New.cs "tento" di scrivere sul Form tramite
    una label e una listBox senza aver alcun riscontro a video, mentre nel file Form1.cs nel metodo button1_Click viene correttamente visualizzata nella listBox1.

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Beh ... le righe in rosso in Program.cs non hanno senso ...

    codice:
    namespace FirstApp
    {
        public class Program
        {
            
            /// <summary>
            /// Punto di ingresso principale dell'applicazione.
            ///     
            [STAThread]        
            public static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
    
                Form1 NewFile = new Form1();
                NewFile.Init();
    
                Application.Run(new Form1());            
            }
        }   
    }
    ... semmai devi eseguire la Init cosi' come mostrato in rosso in Form1.cs ...

    codice:
    namespace FirstApp
    {
        public partial class Form1 : Form
        {
            byte tmp;
            string path = @"E:\SrcSoftware\C#\FirstApp\Sun.bmp";
                   
            public Form1()
            {
                InitializeComponent();     
    
                Init();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {                
                string data = ">Ciao";
                WriteCharOnCom1(data);
                listBox1.Items.Add(data); // Questa viene stampata correttamente
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                label1.Text = "";
                listBox1.Items.Clear();
                listBox2.Items.Clear();
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                // Per test Timer, questa parte è funzionante
                if ((++progressBar1.Value) >= 100)
                    progressBar1.Value = 0;
                //       
    
                if (tmp == 1)
                {
                    tmp = 0;
                    pictureBox1.Image = null;
                   
                }
                else
                {
                    tmp = 1;
                    pictureBox1.Image = Image.FromFile(path);            
                }
            }  
         }
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.