DOMANDA Caricare Metodo All'avvio Del Programma C#

Snowstorm

Utente Attivo
1,280
113
Hardware Utente
CPU
i7 4790k 4.4GHz | Intel Core i7 2630QM 2,00 GHZ, up to 2,9 with Turbo Boost
Dissipatore
Corsair H110i
Scheda Madre
Gigabyte Z97X Gaming 7 | Acer JV51_HR
Hard Disk
Samsung 850 Pro 256gb+HDD WD Caviar Blue 1TB | 750 GB HDD+SSD Samsng 840 Pro 256GB
RAM
G.Skill Sniper 2400MHz cl11 | 6 GB ddr3 1333mhz
Scheda Video
Gigabyte G1 GTX 970 4GB | Una squallida ma funzionante GT 540M
Scheda Audio
Creative SoundBlaster Zx| Realtek HD audio con Dolby Audio Advanced v2
Monitor
LG E2281 Flatron 21,5' | 15.6 pollici HD, monitor notebook Acer
Alimentatore
CM GS650 | Integrato
Case
NZXT Phantom 530 | Acer Aspire 5755G
Periferiche
Casse: M-Audio BX5 D2; Mouse: Steelseries Rival 100; Tastiera: CM Storm Quickfire Ultimate; Cuffie: Superlux HD681Evo
Sistema Operativo
Windows 8.1 | Windows 7 Home Premium
Buonasera, vorrei sapere come posso eseguire certe operazioni - che io ho inserito all'interno di un private void - all'avvio dell'applicazione in Windows Form in C#.
Sapreste darmi una dritta?

Grazie!
 

Snowstorm

Utente Attivo
1,280
113
Hardware Utente
CPU
i7 4790k 4.4GHz | Intel Core i7 2630QM 2,00 GHZ, up to 2,9 with Turbo Boost
Dissipatore
Corsair H110i
Scheda Madre
Gigabyte Z97X Gaming 7 | Acer JV51_HR
Hard Disk
Samsung 850 Pro 256gb+HDD WD Caviar Blue 1TB | 750 GB HDD+SSD Samsng 840 Pro 256GB
RAM
G.Skill Sniper 2400MHz cl11 | 6 GB ddr3 1333mhz
Scheda Video
Gigabyte G1 GTX 970 4GB | Una squallida ma funzionante GT 540M
Scheda Audio
Creative SoundBlaster Zx| Realtek HD audio con Dolby Audio Advanced v2
Monitor
LG E2281 Flatron 21,5' | 15.6 pollici HD, monitor notebook Acer
Alimentatore
CM GS650 | Integrato
Case
NZXT Phantom 530 | Acer Aspire 5755G
Periferiche
Casse: M-Audio BX5 D2; Mouse: Steelseries Rival 100; Tastiera: CM Storm Quickfire Ultimate; Cuffie: Superlux HD681Evo
Sistema Operativo
Windows 8.1 | Windows 7 Home Premium
Puoi mettere un po' di codice ?
Il primo è il load del Form.
Draw_axes() è ciò che voglio avvenga appena lancio l'app.

Codice:
private void CaricaAssi(object sender, EventArgs e)
        {
            Draw_axes();
        }

        public void Draw_axes()  //When every time app is loading draw Cartesan axes first
        {
            Graphics gs = CreateGraphics();
            gs.DrawLine(pen, panel_main.Width / 2, panel_settings.Height, panel_main.Width / 2, (panel_settings.Height + panel_main.Height));  // Y axis
            gs.DrawLine(pen, 0, panel_settings.Height + (panel_main.Height / 2), panel_main.Width, panel_settings.Height + (panel_main.Height / 2));  // X axis
        }

//Altri metodi di controllo e operazioni varie [....]

   public form1() 
        {
            InitializeComponent();
        }

//Corpo del programma comprendente le principali operazioni da eseguire [....]
 

Snowstorm

Utente Attivo
1,280
113
Hardware Utente
CPU
i7 4790k 4.4GHz | Intel Core i7 2630QM 2,00 GHZ, up to 2,9 with Turbo Boost
Dissipatore
Corsair H110i
Scheda Madre
Gigabyte Z97X Gaming 7 | Acer JV51_HR
Hard Disk
Samsung 850 Pro 256gb+HDD WD Caviar Blue 1TB | 750 GB HDD+SSD Samsng 840 Pro 256GB
RAM
G.Skill Sniper 2400MHz cl11 | 6 GB ddr3 1333mhz
Scheda Video
Gigabyte G1 GTX 970 4GB | Una squallida ma funzionante GT 540M
Scheda Audio
Creative SoundBlaster Zx| Realtek HD audio con Dolby Audio Advanced v2
Monitor
LG E2281 Flatron 21,5' | 15.6 pollici HD, monitor notebook Acer
Alimentatore
CM GS650 | Integrato
Case
NZXT Phantom 530 | Acer Aspire 5755G
Periferiche
Casse: M-Audio BX5 D2; Mouse: Steelseries Rival 100; Tastiera: CM Storm Quickfire Ultimate; Cuffie: Superlux HD681Evo
Sistema Operativo
Windows 8.1 | Windows 7 Home Premium
Puoi usare l'evento Shown della Form, dal quale chiamare Draw_axes()
Ho provato, ma gli assi non compaiono

Aggiungo che gli assi non compaiono nemmeno se inserisco le istruzioni all'interno di un button
 

jax29

Nuovo Utente
Credo di aver trovato il problema: la tua funzione va a disegnare su un controllo della form (mi son soffermato meglio sul codice ora).

Il problema è che disegni qualsiasi cosa chiamando una funzione, al prossimo aggiornamento della form, viene rieseguita la OnPaint che ridisegna tutto sovrascrivendo quello che hai disegnato tu.

Quindi, tutte le operazioni di disegno, dovresti eseguirle nell'evento OnPaint della form:
stackoverflow.com/questions/13652568/what-is-the-right-way-to-use-onpaint-in-net-applications

Inoltre, se vai a disegnare solo all'interno del Panel, la cosa migliore sarebbe creare un nuovo Control personalizzato.
 
  • Mi piace
Reactions: Snowstorm e Mursey

Snowstorm

Utente Attivo
1,280
113
Hardware Utente
CPU
i7 4790k 4.4GHz | Intel Core i7 2630QM 2,00 GHZ, up to 2,9 with Turbo Boost
Dissipatore
Corsair H110i
Scheda Madre
Gigabyte Z97X Gaming 7 | Acer JV51_HR
Hard Disk
Samsung 850 Pro 256gb+HDD WD Caviar Blue 1TB | 750 GB HDD+SSD Samsng 840 Pro 256GB
RAM
G.Skill Sniper 2400MHz cl11 | 6 GB ddr3 1333mhz
Scheda Video
Gigabyte G1 GTX 970 4GB | Una squallida ma funzionante GT 540M
Scheda Audio
Creative SoundBlaster Zx| Realtek HD audio con Dolby Audio Advanced v2
Monitor
LG E2281 Flatron 21,5' | 15.6 pollici HD, monitor notebook Acer
Alimentatore
CM GS650 | Integrato
Case
NZXT Phantom 530 | Acer Aspire 5755G
Periferiche
Casse: M-Audio BX5 D2; Mouse: Steelseries Rival 100; Tastiera: CM Storm Quickfire Ultimate; Cuffie: Superlux HD681Evo
Sistema Operativo
Windows 8.1 | Windows 7 Home Premium
Credo di aver trovato il problema: la tua funzione va a disegnare su un controllo della form (mi son soffermato meglio sul codice ora).

Il problema è che disegni qualsiasi cosa chiamando una funzione, al prossimo aggiornamento della form, viene rieseguita la OnPaint che ridisegna tutto sovrascrivendo quello che hai disegnato tu.

Quindi, tutte le operazioni di disegno, dovresti eseguirle nell'evento OnPaint della form:
stackoverflow.com/questions/13652568/what-is-the-right-way-to-use-onpaint-in-net-applications

Inoltre, se vai a disegnare solo all'interno del Panel, la cosa migliore sarebbe creare un nuovo Control personalizzato.
Grazie, essendo un neofita, non ho ben inteso una cosa: dove trovo l'OnPaint?

Ho provato oggi ad inserire il Draw_axes all'interno di un evento Click di una PictureBox e le linee me le disegna.
Come dovrei comportarmi con l'OnPaint?
 

jax29

Nuovo Utente
Grazie, essendo un neofita, non ho ben inteso una cosa: dove trovo l'OnPaint?

Ho provato oggi ad inserire il Draw_axes all'interno di un evento Click di una PictureBox e le linee me le disegna.
Come dovrei comportarmi con l'OnPaint?
La trovi sempre nel pannello degli eventi della form, dove c'è anche Shown. Ci fai doppio click, e te la inserisce nel tuo codice.
La OnPaint viene chiamata ad ogni aggiornamento grafico, quindi tutto il tuo codice che disegna nella form stessa va inserito lì.
non dimenticare che per prima cosa, devi sempre chiamare "base.OnPaint(e);" e poi inserire il tuo codice
 

Snowstorm

Utente Attivo
1,280
113
Hardware Utente
CPU
i7 4790k 4.4GHz | Intel Core i7 2630QM 2,00 GHZ, up to 2,9 with Turbo Boost
Dissipatore
Corsair H110i
Scheda Madre
Gigabyte Z97X Gaming 7 | Acer JV51_HR
Hard Disk
Samsung 850 Pro 256gb+HDD WD Caviar Blue 1TB | 750 GB HDD+SSD Samsng 840 Pro 256GB
RAM
G.Skill Sniper 2400MHz cl11 | 6 GB ddr3 1333mhz
Scheda Video
Gigabyte G1 GTX 970 4GB | Una squallida ma funzionante GT 540M
Scheda Audio
Creative SoundBlaster Zx| Realtek HD audio con Dolby Audio Advanced v2
Monitor
LG E2281 Flatron 21,5' | 15.6 pollici HD, monitor notebook Acer
Alimentatore
CM GS650 | Integrato
Case
NZXT Phantom 530 | Acer Aspire 5755G
Periferiche
Casse: M-Audio BX5 D2; Mouse: Steelseries Rival 100; Tastiera: CM Storm Quickfire Ultimate; Cuffie: Superlux HD681Evo
Sistema Operativo
Windows 8.1 | Windows 7 Home Premium
La trovi sempre nel pannello degli eventi della form, dove c'è anche Shown. Ci fai doppio click, e te la inserisce nel tuo codice.
La OnPaint viene chiamata ad ogni aggiornamento grafico, quindi tutto il tuo codice che disegna nella form stessa va inserito lì.
non dimenticare che per prima cosa, devi sempre chiamare "base.OnPaint(e);" e poi inserire il tuo codice
Ho l'evento Paint, sarà la stessa cosa?
 

jax29

Nuovo Utente
Adesso ho l'IDE sotto mano e ti so dire con precisione:

puoi fare click sul "Paint" della tab degli eventi, e ti viene generato nel codice un metodo, nel quale puoi inserire il tuo codice per disegnare usando l'oggetto e.Graphic.
Questo metodo viene aggiunto all'evento Paint nel file Form1.designer.cs, un po' come avviene quando
gestisci il Click per un Button.
Codice:
private void Form1_Paint(object sender, PaintEventArgs e)
{

}
In alternativa puoi fare l'override del metodo OnPaint in questo modo:
Codice:
protected override void OnPaint(PaintEventArgs e)
{
     base.OnPaint(e); //chiama la OnPaint di Form
     //qui il tuo codice
}
 
  • Mi piace
Reactions: Snowstorm

Snowstorm

Utente Attivo
1,280
113
Hardware Utente
CPU
i7 4790k 4.4GHz | Intel Core i7 2630QM 2,00 GHZ, up to 2,9 with Turbo Boost
Dissipatore
Corsair H110i
Scheda Madre
Gigabyte Z97X Gaming 7 | Acer JV51_HR
Hard Disk
Samsung 850 Pro 256gb+HDD WD Caviar Blue 1TB | 750 GB HDD+SSD Samsng 840 Pro 256GB
RAM
G.Skill Sniper 2400MHz cl11 | 6 GB ddr3 1333mhz
Scheda Video
Gigabyte G1 GTX 970 4GB | Una squallida ma funzionante GT 540M
Scheda Audio
Creative SoundBlaster Zx| Realtek HD audio con Dolby Audio Advanced v2
Monitor
LG E2281 Flatron 21,5' | 15.6 pollici HD, monitor notebook Acer
Alimentatore
CM GS650 | Integrato
Case
NZXT Phantom 530 | Acer Aspire 5755G
Periferiche
Casse: M-Audio BX5 D2; Mouse: Steelseries Rival 100; Tastiera: CM Storm Quickfire Ultimate; Cuffie: Superlux HD681Evo
Sistema Operativo
Windows 8.1 | Windows 7 Home Premium
Adesso ho l'IDE sotto mano e ti so dire con precisione:

puoi fare click sul "Paint" della tab degli eventi, e ti viene generato nel codice un metodo, nel quale puoi inserire il tuo codice per disegnare usando l'oggetto e.Graphic.
Questo metodo viene aggiunto all'evento Paint nel file Form1.designer.cs, un po' come avviene quando
gestisci il Click per un Button.
Codice:
private void Form1_Paint(object sender, PaintEventArgs e)
{

}
In alternativa puoi fare l'override del metodo OnPaint in questo modo:
Codice:
protected override void OnPaint(PaintEventArgs e)
{
     base.OnPaint(e); //chiama la OnPaint di Form
     //qui il tuo codice
}

Ciao, grazie per l'esempio.
Si è creato un evento paint del form e all'interno ho inserito il seguente codice:

Codice:
private void form1_Paint(object sender, PaintEventArgs e)
        {
            base.OnPaint(e);
            Graphics gs = panel_main.CreateGraphics();
            gs.DrawLine(pen, panel_main.Width / 2, 0, panel_main.Width / 2, (panel_main.Height));  // Y axis
            gs.DrawLine(pen, 0, panel_main.Height / 2, panel_main.Width, panel_main.Height / 2);  // X axis
        }
Ho capito bene?

Perché ugualmente non viene disegnato nulla nella form all'avvio
 

Snowstorm

Utente Attivo
1,280
113
Hardware Utente
CPU
i7 4790k 4.4GHz | Intel Core i7 2630QM 2,00 GHZ, up to 2,9 with Turbo Boost
Dissipatore
Corsair H110i
Scheda Madre
Gigabyte Z97X Gaming 7 | Acer JV51_HR
Hard Disk
Samsung 850 Pro 256gb+HDD WD Caviar Blue 1TB | 750 GB HDD+SSD Samsng 840 Pro 256GB
RAM
G.Skill Sniper 2400MHz cl11 | 6 GB ddr3 1333mhz
Scheda Video
Gigabyte G1 GTX 970 4GB | Una squallida ma funzionante GT 540M
Scheda Audio
Creative SoundBlaster Zx| Realtek HD audio con Dolby Audio Advanced v2
Monitor
LG E2281 Flatron 21,5' | 15.6 pollici HD, monitor notebook Acer
Alimentatore
CM GS650 | Integrato
Case
NZXT Phantom 530 | Acer Aspire 5755G
Periferiche
Casse: M-Audio BX5 D2; Mouse: Steelseries Rival 100; Tastiera: CM Storm Quickfire Ultimate; Cuffie: Superlux HD681Evo
Sistema Operativo
Windows 8.1 | Windows 7 Home Premium
Adesso ho l'IDE sotto mano e ti so dire con precisione:

puoi fare click sul "Paint" della tab degli eventi, e ti viene generato nel codice un metodo, nel quale puoi inserire il tuo codice per disegnare usando l'oggetto e.Graphic.
Questo metodo viene aggiunto all'evento Paint nel file Form1.designer.cs, un po' come avviene quando
gestisci il Click per un Button.
Codice:
private void Form1_Paint(object sender, PaintEventArgs e)
{

}
In alternativa puoi fare l'override del metodo OnPaint in questo modo:
Codice:
protected override void OnPaint(PaintEventArgs e)
{
     base.OnPaint(e); //chiama la OnPaint di Form
     //qui il tuo codice
}
Scusa se in ritardo, ma grazie per il suggerimento.
Sono finalmente riuscito a disegnare gli assi ;)
 

Entra

oppure Accedi utilizzando