Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - non visualizzare windows form
Forum - C# / VB.NET - non visualizzare windows form

Avatar
punkettone90 (Member)
Expert


Messaggi: 279
Iscritto: 16/05/2007

Segnala al moderatore
Postato alle 22:22
Venerdì, 18/01/2008
Questo topic è stato chiuso dal moderatore

ciao a tutti!

provengo da un lontano mondo chiamato pascal dove tutto era semplice ma purtroppo anche ahimè, poco produttivo; così mi sono dato al C# che anche se più complesso permette una volta preso mano, di fare cose molto interessanti.
la mia domanda è come fare a creare un programma che non generi nessun windows form fino a che non si verifica un certo evento, voglio inoltre inserire un oggetto della classe timer il cui eventi "tick" comporti il caricamento del window form.
credo debba lavorare sul program.cs che è il punto d'ingresso dell'applicazione, ma dopo li come posso gestire l'evento tick?

grazie!!!! 8-|

PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 15:21
Sabato, 19/01/2008
Nello stesso modo in cui lo gestisci nella windows form. Crei un timer nel modulo, lo avvii in Main e scrivi un gestore d'evento. Posso provare a postarti un codice, tradotto con un convertitore vb.net-C#.
Codice sorgente - presumibilmente C++

  1. class Module1
  2.  {
  3.      public Timer tmrApp = new Timer();
  4.    
  5.      public void Main()
  6.      {
  7.          tmrApp.Tick += tmrApp_Tick;
  8.          tmrApp.Interval = 2000;
  9.          tmrApp.Start();
  10.      }
  11.    
  12.      private void tmrApp_Tick(object sender, EventArgs e)
  13.      {
  14.          tmrApp.Stop();
  15.          Application.Run(My.Forms.Form1);
  16.      }
  17.  }


Ultima modifica effettuata da Il Totem il 19/01/2008 alle 15:22
PM
Avatar
punkettone90 (Member)
Expert


Messaggi: 279
Iscritto: 16/05/2007

Segnala al moderatore
Postato alle 22:48
Sabato, 19/01/2008
molto probabilmente il codice che mi hai dato è c++
c# sicuramente no visto che questo linguaggio non accetta metodi al di fuori di una classe

posto quello che sono riuscito a fare


Codice sorgente - presumibilmente C++

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Windows.Forms;
  4.  
  5. namespace promemoria
  6. {
  7.     static class Program
  8.     {
  9.         /// <summary>
  10.         /// Punto di ingresso principale dell'applicazione.
  11.         /// </summary>
  12.        
  13.  
  14.         class gestione_tempo
  15.         {
  16.  
  17.             public Timer tempo = new Timer();
  18.            
  19.            
  20.             public  gestione_tempo()
  21.             {
  22.                
  23.                 this.tempo.Interval = 100;
  24.                 this.tempo.Start();
  25.                 this.tempo.Tick += new EventHandler(fermati);
  26.                
  27.             }          
  28.  
  29.        
  30.            
  31.            
  32.             public void fermati(object sender, EventArgs e)
  33.             {
  34.                 this.tempo.Stop();
  35.                 Application.EnableVisualStyles();
  36.  
  37.                 Application.Run(new Form1());
  38.  
  39.             }
  40.  
  41.  
  42.         }
  43.  
  44.  
  45.         [STAThread]
  46.         static void Main()
  47.         {
  48.  
  49.             gestione_tempo miaclasse = new gestione_tempo();
  50.            
  51.  
  52.      
  53.         }
  54.     }
  55. }




questo è il file program.cs
non ci sono errori di compilazone, ma non riesco a gestire l'evento tick :(

potete darmi una mano?

Ultima modifica effettuata da Il Totem il 20/01/2008 alle 9:46
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 9:53
Domenica, 20/01/2008
Il codice è giusto da quello che leggo. Prova ad aumetare l'interval a, diciamo, 2000: forse non vedi la differenza con 0.1s.

P.S.: non fidarti di quello che scrive il codice php sui sorgenti. So quello che faccio e conosco il .net molto bene: il codice che ti ho dato è indiscutibilmente C#. Anche perchè in C++ non c'è il tipo EventArgs o la classe Application, né è possibile aggiungere handler d'evento e ad ogni modo i metodi erano nella classe Module1, per la quale noi vbnettisti usiamo solitamente i moduli.

PM
Avatar
punkettone90 (Member)
Expert


Messaggi: 279
Iscritto: 16/05/2007

Segnala al moderatore
Postato alle 20:05
Domenica, 20/01/2008
anche mettendo a 2000 non cambia nulla
comunque avevi ragione te, è c# il codice che mi hai dato, non mi ero accorto della classe module1. comqunque resta il problema, ho usato una classe statica che mi da l'ora corrente, io ho bisogno che quando viene quell'ora si carichi il form.
per fare questo ho bisogno della classe timer che ogni diciamo 0,1 secondi mi controlli se l'ora x è avvenuta e in quel caso faccia comparire il form.

come posso fare? in particolare ho problemi nel gestire l'evento tick

PM
Avatar
punkettone90 (Member)
Expert


Messaggi: 279
Iscritto: 16/05/2007

Segnala al moderatore
Postato alle 20:13
Domenica, 20/01/2008
l'altra cosa che ho provato è lasciar perdere il file del progetto "program.cs" e lavorare invece sul codice del form ma anche mettendo la proprietà "enabled" sia su false, sia su true, sia chiamando il metodo "hide" il form si vede lo stesso

cosa posso fare?

PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 17:47
Lunedì, 21/01/2008
Prova as mettere Opacity a 0 (totalmente trasparente) e ShowInTaskBar = False (così non si vede nella barra delle applicazioni). Oppure metti, dopo il caricamento dell'interfaccia, FormBorderStyle = ToolWindow e Visible a False.

PM