Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [Visual C#] Interfaccia aggiornabile mediante parametri

    Salve a tutti,
    a causa di un progetto universitario, mi sono imbattuto per la prima volta in C# ed interfacce grafiche.
    Bene, il mio problema è semplice.
    La mia classe è progettata in maniera tale che, l'interfaccia varia in base al parametro di ingresso al costruttore.
    Bene, come posso far si che, nel main Application.Run si aggiorni con un nuovo form, senza chiudere e riaprire l'applicazione?

    Ho provato diverse soluzioni, ma invano.

    La mia idea principale era quella di far partire su un thread Application.Run, e utilizzare le istruzioni form.Show() per variare il contenuto del form, ma ciò non ha funzionato. Il form viene creato(sento un particolare file audio impostato all'avvio), ma a video visualizzo la schermata principale, e non la nuova.

    Ecco un pezzetto di codice:

    codice:
    static void Main()
        {
          Thread threadApplication = new Thread(new ThreadStart(RunApplication));
          threadApplication.Start();
          string pathSurevy = Path.GetDirectoryName(
          System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
          + subPathSurvey + nameSurveyFile;
          while (countLines(pathSurevy) > 0)
          {
            Thread threadForm = new Thread(new ThreadStart(RunStart));
            threadForm.Start();
            Thread.Sleep(50000);
          }
        }
    
        public static Interface makeInterface()
        {
          string relativePath = subPathSurvey + nameSurveyFile;
          string survey = extractLine(relativePath, new object(), new EventArgs());
          if (survey != null)
          {
            LogicaDiSistema logicSystem = new LogicaDiSistema();
            return logicSystem.receiveSurvey(survey);
          }
          else
          {
            return new Interface(null);
          }
        }
    
        public static void RunStart() {
    
        makeInterface().Show();
        }
    
        public static void runApplication() { 
    
        Application.Run(new Interface(null));
    
        }

    Il Form Interface, istanzia gli oggetti in base al Metatag ricevuto, se è nullo, visualizza una sorta di messaggio.
    Il mio intento è quello di cambiare dinamicamente l'interfaccia in base ai vari metatg contenuti in un file di testo!

    Se utilizzo la funziona ShowDialog() in sostituzione della Show(), il programma funziona, ma mi apre un nuovo "popup" per ogni nuovo form!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,319

    Moderazione

    C# e tutti i linguaggi .NET vengono trattati nel forum "Visual Basic e .NET Framework".

    Ho spostato la discussione.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Ok, scusa la distrazione!

  4. #4
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536

    Re: [Visual C#] Interfaccia aggiornabile mediante parametri

    mi scuso in anticipo perchè non è che proprio abbia capito cosa vuoi ottenere esattamente, però mi chiedo :

    Originariamente inviato da generalekamikaz
    Se utilizzo la funziona ShowDialog() in sostituzione della Show(), il programma funziona, ma mi apre un nuovo "popup" per ogni nuovo form!
    e non dovrebbe farlo? forse ne vuoi averne sempre e solo 1 e lui ne apre a rotazione?

  5. #5
    Diciamo che, io dovrei fare il refresh del form. Almeno teoricamente.
    Io invece creo ogni volta un nuovo form, con un parametro del costruttore differente.
    In modo che l'interfaccia si presenti diversa. Tuttavia, con la ShowDialog ogni volta mi appare una nuova finestra, io vorrei che la finestra sia sempre la stessa!

  6. #6
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    allora il paramentro non dovresti passarlo nel costruttore, infatti questo, come dice la parola, serve a "costruire" la classe, una volta "costruita" non puoi passare parametri ad esso.

    dovresti mettere un metodo nella classe che ti consenta di modificarla una volta creata, e metterla un un campo, da li, anzichè crearla ogni volta, chiami il metodo di modifica attraverso il campo creato contenente il form.

    magari più tardi dò un occhiata meglio al codice.

    ciao.

  7. #7
    Quindi praticamente.
    Devo costruire un unica istanza della Form.
    Il costruttore deve rimanere vuoto. Giusto?

  8. #8
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    Originariamente inviato da generalekamikaz
    Quindi praticamente.
    Devo costruire un unica istanza della Form.
    Il costruttore deve rimanere vuoto. Giusto?
    mi potresti spiegare il perchè di questo :

    codice:
    *************** 
    //con questo vorresti che ti cambiasse la musichetta (o la grafica...) del form ogni 50 secondi?
     while (countLines(pathSurevy) > 0)
    
          {
            Thread threadForm = new Thread(new ThreadStart(RunStart));
            threadForm.Start();
            Thread.Sleep(50000);
          }
        }
    ***********************
        public static Interface makeInterface()
        {
          string relativePath = subPathSurvey + nameSurveyFile;
          string survey = extractLine(relativePath, new object(), new EventArgs());
          if (survey != null)
          {
    ***************
    //questo esattamente cosa fa? c'è un motivo in particolare perchè fai restituire un form dal metodo .receiveSurvey(survey)?
            LogicaDiSistema logicSystem = new LogicaDiSistema();
            return logicSystem.receiveSurvey(survey);
    ****************
    //presumo che anzichè farti restituire un form nuovo debba modificare quello già esistente (che avvii con application.run)
          }
          else
          {
            return new Interface(null);
          }
        }
    poi perchè non fai tutto dentro il form che crei anzichè utilizzare la program? secondo me lavoreresti meglio.

  9. #9
    Allora, la prima parte serve appunto ad aggiornare il form ogni 50 secondi.
    Faccio partire il thread su Application.run, altrimenti non mi permetterebbe di eseguire le altre istruzioni.
    Il concetto del programma è semplice.
    Esiste una classe che deve ricevere una stringa via Tcp/Ip, che per semplicità è simulato per mezzo di un file di testo.
    Il Program, estrae la stringa e la fa "ricevere" dalla classe per il controllo della stringa. Quest'ultima, una volta fatto un particolare controllo su questa stringa, lancia la ShowDialog sul Form, passandogli nel costruttore le modifiche!

  10. #10
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    ok, immaginavo una situazione del genere, ma come mai non fai tutto dentro il form principale (e non dentro la program) e usi un timer? la cosa penso che ti complicherebbe meno la vita....
    poi ovviamente è indiscutibile che magari hai i tuoi motivi, ma da quello che mi hai detto mi pare la soluzione ideale quella di fare tutto dentro il form.

    quindi avvii il form (non credo sia necessario passargli dei parametri nel costruttore visto che il primo avvio lo fai con null) normalmente con application.run, dentro esso metti un metodo che determina la logica per l'aggiornamento, un timer che controlla la stringa che arriva da Tcp/IP (o ne simula gli effetti random), o ancora meglio, visto che immagino che farai in modo che la ricezione della stringa sia asincrona, crei un evento che che chiama il metodo per l'aggiornamento.

    altra curiosità : il form secondario deve esistere necessariamente? devi fare delle modifiche e/o visualizzazzioni separate dal form principale?

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.