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 - Chiusura Applicazione in c#
Forum - C# / VB.NET - Chiusura Applicazione in c#

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
alip1 (Normal User)
Pro


Messaggi: 139
Iscritto: 12/08/2019

Segnala al moderatore
Postato alle 11:41
Sabato, 08/07/2023
Buongiorno, intanto mi scuserete per la forse banalità della domanda
sto cercando di ristudiare c# per poi convertire un mio progetto da VB 2012 in C# 2012. Sto utilizzando la suite VS 2012 ovviamente..

Ho il seguente codice nel file program.cs:
Codice sorgente - presumibilmente C++

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using System.Windows.Forms;
  6.  
  7. namespace FinancialCalculations
  8. {
  9.     static class Program
  10.     {
  11.         /// <summary>
  12.         /// The main entry point for the application.
  13.         /// </summary>
  14.         [STAThread]
  15.         static void Main()
  16.         {
  17.             if (startApplication())
  18.             {
  19.             Application.EnableVisualStyles();
  20.             Application.SetCompatibleTextRenderingDefault(false);
  21.             Application.Run(new frmMain());
  22.             }
  23.             else
  24.             {
  25.                 TerminaApp();
  26.             }
  27.         }
  28.         static public bool startApplication()
  29.         {
  30.             // codice apertura login ecc...
  31.             return true;
  32.         }
  33.  
  34.         static void TerminaApp()
  35.         {
  36.             /// codice di chiusura
  37.             Application.Exit;
  38.         }
  39.     }
  40. }



la riga di comando per terminare l'applicazione
Codice sorgente - presumibilmente Plain Text

  1. Application.Exit;


mi da errore già a livello di progettazione:_doubt:!!

Nella lista degli errori trovo:

Codice sorgente - presumibilmente VB.NET

  1. Error   1       Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement



e non riesco a capire nè cosa difatto significhi e come risolvererlo:_doubt:
Grazie per ogni aiuto.

Ultima modifica effettuata da alip1 il 08/07/2023 alle 11:42
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1352
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 13:36
Sabato, 08/07/2023
La sintassi è sbagliata, Application.Exit; si scrive Application.Exit();

Ma il codice che hai proposto non eseguirà mai l'istruzione Application.Exit(); a meno che non ci sia un errore in: startApplication().

Quando apri una nuova applicazione in VS, C# WindowsForm, ti viene proposto un progetto pronto per iniziare.
Il progetto conterrà, Program.cs con questo codice:
Codice sorgente - presumibilmente C++

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Windows.Forms;
  5.  
  6. namespace FinancialCalculations
  7. {
  8.     static class Program
  9.     {
  10.         /// <summary>
  11.         /// Punto di ingresso principale dell'applicazione.
  12.         /// </summary>
  13.         [STAThread]
  14.         static void Main()
  15.         {
  16.             Application.EnableVisualStyles();
  17.             Application.SetCompatibleTextRenderingDefault(false);
  18.             Application.Run(new Form1());
  19.         }
  20.     }
  21. }



Che imposta l'oggetto d'ingresso: Application.Run(new Form1()); oppure Application.Run(new frmMain()); se hai rinominato Form1.cs

Per un progetto WinForm il codice in Program.cs solitamente non va modificato.
La tua programmazione deve essere implementata nel codice presente in Form1.cs o ComeSiChiamaIlFormDiAvvio.cs. Per accedere al codice di Form1, clicca su Form1.cs nella finestra Esplora soluzioni con il tasto destro e scegli: Visualizza codice (F7).

Il codice in Form1.cs si presenta così:
Codice sorgente - presumibilmente C++

  1. using System.ComponentModel;
  2. using System.Data;
  3. using System.Drawing;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Windows.Forms;
  7.  
  8. namespace FinancialCalculations
  9. {
  10.     public partial class Form1 : Form
  11.     {
  12.         public Form1()
  13.         {
  14.             InitializeComponent();
  15.         }
  16.     }
  17. }



Questo codice è quello che viene eseguito in prima istanza e lanciato da Program.cs
Nello specifico InitializeComponent(); carica il codice presente in: Form1.Designer.cs
Il codice in: Form1.Designer.cs viene autogenerato da VS quando si mettono i vari componenti sul form da designer(progettazione).

Se vuoi eseguire l'istruzione: Application.Exit(); devi attendere che il fom sia creato e caricato, per fare questo vai sulla finestra Form1.cs [Progettazione], clicca due volte sul form vuoto per creare l'evento: LOAD, nell'evento LOAD ora puoi inserire l'istruzione di chiusura:
Codice sorgente - presumibilmente C++

  1. using System.ComponentModel;
  2. using System.Data;
  3. using System.Drawing;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Windows.Forms;
  7.  
  8. namespace FinancialCalculations
  9. {
  10.     public partial class Form1 : Form
  11.     {
  12.         public Form1()
  13.         {
  14.             InitializeComponent();
  15.         }
  16.  
  17.         private void Form1_Load(object sender, EventArgs e)
  18.         {
  19.             Application.Exit();
  20.         }
  21.     }
  22. }



Il risultato di questa operazione è:
Program.cs lancia Form1, in Form1 viene creato il form ( InitializeComponent(); ) una volta caricato Form1, nell'evento: Form1_Load viene terminato con: Application.Exit();



Ultima modifica effettuata da Carlo il 08/07/2023 alle 21:06


in programmazione tutto è permesso
PM Quote
Avatar
alip1 (Normal User)
Pro


Messaggi: 139
Iscritto: 12/08/2019

Segnala al moderatore
Postato alle 10:47
Lunedì, 10/07/2023
Grazie Carlo.. risolto..

Ancora una domanda in merito... volendo metterle in un modulo cs le due routine dichiarate public è possibile farlo per poi richiamarle da un qualsiasi altro punto del programma come accade con vb.net??
Ho provato ad aggiungere un modulo StartStopApp.cs al progetto e nel codice ho inserito le due routine così dichiarate:
Codice sorgente - presumibilmente C++

  1. public bool startApplication()
  2.         {
  3.             // codice apertura login ecc...
  4.             MessageBox.Show("Apertura App", "Enter", MessageBoxButtons.OK, MessageBoxIcon.Information); // temporaneo
  5.             return false;
  6.         }
  7. public void TerminaApp()
  8.         {
  9.             /// codice di chiusura
  10.             MessageBox.Show("Chiusura App", "Exit", MessageBoxButtons.OK, MessageBoxIcon.Information); // mi serve temp
  11.             Application.Exit();          
  12.         }



Intanto mi sottolinea sia il bool che il void! dicendomi: Error    3    Expected class, delegate, enum, interface, or struct!!
Inoltre ovviamente la chiamata dal program.cs :
Codice sorgente - presumibilmente C++

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using System.Windows.Forms;
  6.  
  7. namespace FinancialCalculations
  8. {
  9.     static class Program
  10.     {
  11.         /// <summary>
  12.         /// The main entry point for the application.
  13.         /// </summary>
  14.         [STAThread]
  15.         static void Main()
  16.         {
  17.             if (startApplication())
  18.             {
  19.             Application.EnableVisualStyles();
  20.             Application.SetCompatibleTextRenderingDefault(false);
  21.             Application.Run(new frmMain());
  22.             }
  23.             else
  24.             {
  25.                // Application.Exit;
  26.                 TerminaApp();
  27.             }
  28.         }
  29.     }
  30. }



mi dice che  Error    1    The name 'startApplication' does not exist in the current context    
e la stessa cosa per 'terminaApp()!!
Non riesco proprio a capire come fare; eppure in VB è così semplice e banale... mi son letto parecchie guide ma di fatto non riesco a capire dov'è il problema e l'impostazione scorretta.. Grazie per ogni aiuto

Ultima modifica effettuata da alip1 il 10/07/2023 alle 10:50
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2308
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 12:41
Lunedì, 10/07/2023
Se hai messo le due funzioni in una classe vuota ovvio che ti dia errore.

in c# il tutto deve avere una struttura

--- Eventuali using

namespace MioNameSpace {

   public class MiaClasse
  {
      
      //Mie Funzioni boo o void.



  }

}




Codice sorgente - presumibilmente C++

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using System.Windows.Forms;
  6.  
  7. namespace FinancialCalculations
  8. {
  9.  
  10.     public class MieiMetodi
  11.     {
  12.  
  13.        public bool startApplication()
  14.         {
  15.             // codice apertura login ecc...
  16.             MessageBox.Show("Apertura App", "Enter", MessageBoxButtons.OK, MessageBoxIcon.Information); // temporaneo
  17.             return false;
  18.         }
  19.  
  20.  
  21.         public void TerminaApp()
  22.         {
  23.             /// codice di chiusura
  24.             MessageBox.Show("Chiusura App", "Exit", MessageBoxButtons.OK, MessageBoxIcon.Information); // mi serve temp
  25.             Application.Exit();          
  26.         }
  27.  
  28.  
  29.      }
  30.  
  31.  
  32.  
  33. }



Creata la classe, dal un'altro Form o punto dell'applicazione

Codice sorgente - presumibilmente C# / VB.NET

  1. MieiMetodi mm = new MieiMetodi();
  2.  
  3. bool risultato = mm.startApplication();
  4.  
  5. if(risultato == true)
  6. {
  7.  
  8.   //prosegue
  9. }else
  10. {
  11.      mm.TerminaApp();
  12. }



https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1352
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 12:49
Lunedì, 10/07/2023
Testo quotato

Postato originariamente da alip1:
Volendo metterle in un modulo cs le due routine dichiarate public è possibile farlo per poi richiamarle da un qualsiasi altro punto del programma come accade con vb.net??
Ho provato ad aggiungere un modulo StartStopApp.cs al progetto...



In C# si aggiunge una classe.

Il codice in Program.cs, non lo devi modificare, serve per il punto di ingresso dell'applicazione.
Program.cs:
Codice sorgente - presumibilmente C++

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Windows.Forms;
  5.  
  6. namespace FinancialCalculations
  7. {
  8.     static class Program
  9.     {
  10.         /// <summary>
  11.         /// Punto di ingresso principale dell'applicazione.
  12.         /// </summary>
  13.         [STAThread]
  14.         static void Main()
  15.         {
  16.             Application.EnableVisualStyles();
  17.             Application.SetCompatibleTextRenderingDefault(false);
  18.             Application.Run(new frmMain());
  19.         }
  20.     }
  21. }


Aggiungi una classe, StartStopApp
StartStopApp.cs:
Codice sorgente - presumibilmente C++

  1. using System.Windows.Forms;
  2.  
  3. namespace FinancialCalculations
  4. {
  5.     public class StartStopApp
  6.     {
  7.         public bool startApplication()
  8.         {
  9.             // codice apertura login ecc...
  10.             MessageBox.Show("Apertura App", "Enter", MessageBoxButtons.OK, MessageBoxIcon.Information); // temporaneo
  11.             return false;
  12.         }
  13.         public void TerminaApp()
  14.         {
  15.             /// codice di chiusura
  16.             MessageBox.Show("Chiusura App", "Exit", MessageBoxButtons.OK, MessageBoxIcon.Information); // mi serve temp
  17.             Application.Exit();
  18.         }
  19.     }
  20. }



Ora in frmMain.cs puoi dichiarare la classe StartStopApp l'ho chiamata modulo usando i metodi contenuti ed esposti con public
Codice sorgente - presumibilmente C++

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9.  
  10. namespace FinancialCalculations
  11. {
  12.     public partial class frmMain : Form
  13.     {
  14.         private StartStopApp modulo = new StartStopApp(); // modulo, conterrà la tua classe
  15.  
  16.         public frmMain()
  17.         {
  18.             InitializeComponent();
  19.             modulo.startApplication();
  20.             modulo.TerminaApp();
  21.         }
  22.     }
  23. }



Questo esempio serve solo per farti capire come rendere visibili le classi tra di loro, a livello di logica non fa nulla di funzionale.
Nota che Application.Exit(); viene eseguito quando il form non è stato ancora caricato e non avrà nulla da chiudere.

Cosa vuoi ottenere?

Ultima modifica effettuata da Carlo il 10/07/2023 alle 13:06


in programmazione tutto è permesso
PM Quote
Avatar
alip1 (Normal User)
Pro


Messaggi: 139
Iscritto: 12/08/2019

Segnala al moderatore
Postato alle 17:15
Lunedì, 10/07/2023
Grazie Carlo.

Veramente io pensavo (come in VB) di poter dichiarare in un modulo  .cs una serie di routine (funzioni o meno) pubbliche da poter richiamare per poter fare delle cose prima di lanciare il form principale di apertura. Ciò perché vorrei poter andare a leggere, ad es., un file che mi permette di settare delle variabili globali (ad esempio una variabile è per conoscere il path del server SQL..) poi lanciare un form di login che mi controlla e mi definisce l'utente che accede con le relative autorizzazioni (lette da apposita tabella nel db... ) e solo allora se tutto ok mi apre un form mdi col quale l'utente gestisce l'applicazione vera e propria... L'applicazione l'ho già completamente sviluppata in vb.net (2012) e funziona perfettamente... Ora stavo cercando di riprendere lo studio di C# con un'applicazione di esempio per reimpararlo per poi migrare l'applicazione vera propria da vb a c#. Ma prima di farlo sto cercando di chiarirmi le idee...
Ora da quando mi hai postato, di cui ti ringrazio, mi pare di capire che anche per le routine, diciamo così, di servizio devo definire una classe che poi dovrò istanziare quando devo usare le routine... Però non capisco perché sono obbligato a doverle istanziare in un form che non aprirò mai... E' questo che non capisco e probabilmente sono fortemente condizionato dal modo di pensare e programmare in vb...
Io pensavo (come fatto in vb) di definire le routine di servizio in modalità public e poi richiamarle nella routine Main e dopo aver superato tutti i controlli lanciare il frmMain che gestirà l'applicazione.

Scusami, per la mia grassa ignoranza, e spero di essere riuscito a spiegarmi e ti sarei veramente grato di ogni utile consiglio.

Aggiungo una nota provando e riprovando ho risolto così:
ho creata la classe StartStopApp con le due routine di prova... come da te suggerito quindi nel program.cs ho fatto:
Codice sorgente - presumibilmente C++

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Windows.Forms;
  5.  
  6. namespace FinancialCalculations
  7. {
  8.     class Program
  9.     {
  10.         /// <summary>
  11.         /// Punto di ingresso principale dell'applicazione.
  12.         /// </summary>
  13.         [STAThread]
  14.         static void Main()
  15.         {
  16.             StartStopApp Start = new StartStopApp(); // modulo, contiene le routine pubbliche
  17.             Application.EnableVisualStyles();
  18.             Application.SetCompatibleTextRenderingDefault(false);
  19.             if (Start.startApplication())
  20.             {
  21.                 Application.Run(new frmMain());
  22.             }
  23.             else
  24.             {
  25.                 Start.TerminaApp();
  26.             }            
  27.         }
  28.     }
  29. }



Funziona mi apre i messaggi e quindi se restituisce true mi apre il formMain.
Pensi che possa considerarsi corretto??
Grazie

Ultima modifica effettuata da alip1 il 10/07/2023 alle 17:50
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6405
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:33
Lunedì, 10/07/2023
Ma esattamente che tipo di progetto hai creato?

Console o Windows Form?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1352
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 23:36
Lunedì, 10/07/2023
Testo quotato

Postato originariamente da alip1:
Io pensavo (come in VB) di poter dichiarare in un modulo  .cs una serie di routine (funzioni o meno) pubbliche da poter richiamare per poter fare delle cose prima di lanciare il form principale di apertura...



Si può fare con le variabili statiche (static) che sono visibili in tutte le classi.
Ti sconsiglio di usare tale pratica in C# perché ti perdi tutti i vantaggi delle classi. Una classe è riutilizzabile in più forms e routine e le variabili entro contenute resteranno valide solo per le istanze scelte.

Nel tuo caso semplicemente ti devi creare un form aggiuntivo con tutto quello che ti serve per fare login, scelta db ecc. ecc.
Il form2 lo istanzierai e renderai visibile prima del form1...

Ho già aiutato un utente per un motivo simile e ho ancora l'esempio che gli postai, te lo allego.

Non fa quello che ti serve ma una volta capito non ti dovrebbe restare difficile fare quello che ti sei prefisso.
Prova e chiedi.


Carlo ha allegato un file: DueForms.zip (448150 bytes)
Clicca qui per scaricare il file

Ultima modifica effettuata da Carlo il 16/07/2023 alle 9:33


in programmazione tutto è permesso
PM Quote
Avatar
alip1 (Normal User)
Pro


Messaggi: 139
Iscritto: 12/08/2019

Segnala al moderatore
Postato alle 11:38
Martedì, 11/07/2023
Testo quotato

Postato originariamente da nessuno:

Ma esattamente che tipo di progetto hai creato?

Console o Windows Form?



Windows Form

PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo