Skip to content

Raggruppamento dei test con aggiunta di interfaccia grafica WPF

License

Notifications You must be signed in to change notification settings

Nemonek/WPFTabs

Repository files navigation

WPFTabs

Consegna

La consegna richiede la realizzazione di un programma che, usando il framework Windows Presentation Foundation (WPF), crei, con l'uso del controllo TabControl, un minimo di 5 tab, schede, che implementino il codice sviluppato nei compiti "test": sono obbligatori CollaTZ e Isogramma; gli altri 3 o più sono a scelta.

Soluzione

La soluzione qua caricata prevede, la creazione di 5 tab strutturate come rappresentato nell'immagine: immagine Ogni bottone 'avvia' è collegato ad un Even Handler, che, alla pressione, chiama una funzione chiamata startProgramName: nel caso in cui l'input non sia valido verrà mostrato in output un messsaggio che chiede l'inserimento di dati corretti, mentre, nel caso in cui sia valido, verrà mostrato l'output del programma. Per quanto riguarda il bottone di reset, anche lui è collegato ad un Event Handler, che, alla pressione, resetta l'input e l'output del relativo TabItem.
In aggiunta, anche la casella di testo dell'input è collegata ad un Event Handler, il cui compito è gestire la pressione del tasto invio durante l'input: se viene premuto, viene chiamata la stessa funzione che verrebbe chiamata alla pressione del tasto 'avvia'.

Codice

Il codice di ogni tab, sia XAML che C#, presenta una struttura pressochè identica alle altre tab: qui di seguito un esempio generico di codice XAML e C# dove ProgramName rappresenta il nome dell'algoritmo che si vuole implementare.

Interfaccia grafica (XAML)

L'interfaccia grafica di ogni tab è definita da una Grid di 4 righe e 4 colonne: nella prima riga sono posizionati i bottoni 'avvia' e 'reset'; nella seconda e nella 3 è collocata la descrizione dell'algoritmo collegato alla tab, mentre nella 4 sono presenti la casella di input e di output.
Il codice di ogni tab risulta quindi essere composto da 4 parti:

  • Definizione delle righe e delle colonne della Grid
 <Grid.RowDefinitions>
     <RowDefinition></RowDefinition> <!--Indice 0-->
     <RowDefinition></RowDefinition> <!--Indice 1-->
     <RowDefinition></RowDefinition> <!--Indice 2-->
     <RowDefinition></RowDefinition> <!--Indice 3-->
 </Grid.RowDefinitions>
 <Grid.ColumnDefinitions>
     <ColumnDefinition></ColumnDefinition> <!--Indice 0-->
     <ColumnDefinition></ColumnDefinition> <!--Indice 1-->
     <ColumnDefinition></ColumnDefinition> <!--Indice 2-->
     <ColumnDefinition></ColumnDefinition> <!--Indice 3-->
 </Grid.ColumnDefinitions>
  • definizione dei bottoni 'avvia' e 'reset'
  <Button Margin="15px" Width="100px" Grid.Row="0" Grid.Column="0" Click="StartProgramNameButtonPressEvent">Avvia</Button>
  <Button Margin="15px" Width="100px" Grid.Row="0" Grid.Column="1" Click="ResetProgramName">Reset</Button>
  • descrizione dell'algoritmo;
  <RichTextBox Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="4" Grid.RowSpan="2" Margin="20 0 20 0" IsReadOnly="True">
      <FlowDocument>
          <Paragraph>
              # Descrizione dell'esercizio
              <LineBreak/>
              Lo scopo di questo esercizio è...
              <LineBreak/>
          </Paragraph>
      </FlowDocument>
  </RichTextBox>
  • definizione delle caselle di input e output
  <TextBlock VerticalAlignment="Top" Grid.Row="3" Grid.Column="0">Input: (Press enter or start button)</TextBlock>
  <TextBox VerticalAlignment="Center" Grid.Row="3" Grid.Column="0" x:Name="InputProgramName" Keyboard.PreviewKeyDown="ProgramName_EnterPressed"></TextBox>
  <TextBlock VerticalAlignment="Top" Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="2">Output:</TextBlock>
  <TextBlock VerticalAlignment="Center" Grid.Row="3" Grid.Column="1" x:Name="OutputProgramName" Grid.ColumnSpan="2"></TextBlock>

Codice C#

Come il codice XAML, anche il codice C# presenta una struttura ben definita:

  • Event Handler per la gestione del bottone 'avvia', la pressione di invio nella casella di input e del bottone 'reset'
  private void StartProgramNameButtonPressEvent(object sender, RoutedEventArgs e)
  {
      StartProgramName();
  }
  
  private void InputProgramName_EnterPressed(object sender, KeyEventArgs e)
  {
      if (e.Key == Key.Return)
      {
          StartProgramName();
      }
  }
  
  private void ResetAcronimo(object sender, RoutedEventArgs e)
  {
      InputAcronimo.Text = "";
      OutputAcronimo.Text = "";
  }
  • funzione di avvio dell'algoritmo (gestisce anche la visualizzazione dell'output)
  private void StartProgramName()
  {
      string ProgramNameResult = ProgramName();
      if (AcronimoResult == "ErrorMessage")
          OutputAcronimo.Text = "ERROR: please insert a word!";
      OutputAcronimo.Text = AcronimoResult;
  }

ErrorMessage rappresenta il valore che si è deciso di far ritornare dalla funzione in caso di input invalido.

  • la funzione contenente l'algoritmo da eseguire.


About

Raggruppamento dei test con aggiunta di interfaccia grafica WPF

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages