Gianni Giaccaglini

Tricks & mini applics on WPF
posts - 46, comments - 0, trackbacks - 0

MessageBox emulato in VS 2012

 

MessageBox emulato in VS 2012

La sperimentazione descritta nel post precedente su questo blog è avvenuta in ambito 2010 perché tuttora a me più familiare e, inoltre, consentiva più comodi inserimenti di MessageBox (non più supportato in VS 2012). Poi mi sono detto: “Ma il trucco andrà bene pure nel nuovo terreno?” Dico subito che la risposta è stata positiva, a parte qualche patimento causato da piccole quanto inattese incompatibilità.

Il modellino semplificato consiste in una griglia (Grid) di 2 righe x  3 colonne contenente 4 Button denominati puls1, puls2, puls3 e puls4 nonché una TextBox di nome miaCas. In aggiunta uno StackPanel di nome mioStkpnl collocato sulla destra impila una sotto l’altro una TextBox di nome txtMsgBox e due Button di nome btn1 e btn2. Tale pannello di controllo vuol rudemente emulare la più semplice delle MessageBox che il convento Win 2012 non passa più.

 

Nota. Un’altra assenza è quella dei controlli Label. Per cui le etichette ora vanno sostituite con caselle di testo (che per fortuna sono più versatili), come ho dovuto fare con la txtMsgBox.

 

XAML

<Page

    x:Class="App4.MainPage"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:local="using:App4"

    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

    mc:Ignorable="d">

 

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">

        <Grid.Resources>

            <Style TargetType="Button" x:Key="mioPuls">

                <Setter Property="Margin" Value="130,75,0,0"/>

                <Setter Property="Width" Value="255" />

                <Setter Property="Height" Value="85" />

                <Setter Property="FontFamily" Value="Tahoma" />

                <Setter Property="FontSize" Value="30" />

                <Setter Property="HorizontalAlignment" Value="Left" />

                <Setter Property="VerticalAlignment" Value="Top" />

                <Setter Property="Background" Value="DarkBlue" />

            </Style>

        </Grid.Resources>

        <Grid.RowDefinitions>

            <RowDefinition Height="25*" />

            <RowDefinition Height="25*" />

        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>

            <ColumnDefinition Width="500" />

            <ColumnDefinition Width="500*"/>

            <ColumnDefinition Width="500*"/>

        </Grid.ColumnDefinitions>

        <Button Name="puls1" Grid.Row="0" Grid.Column="0"

            Content="Pulsante1" Style="{StaticResource mioPuls}"/>

        <Button Name="puls2" Grid.Row="0" Grid.Column="1"

            Content="AlternaPuls1" Style="{StaticResource mioPuls}"/>

        <Button Name="puls3" Grid.Row="1" Grid.Column="0"

            Content=" AlternaPuls1" Style="{StaticResource mioPuls}"/>

        <Button Name="puls4" Grid.Row="1" Grid.Column="1"

            Content="MessageBox"  Style="{StaticResource mioPuls}"/>

        <TextBox Name ="miaCas"  HorizontalAlignment="Left"

                 Height="45" Margin="95,256,0,0" Grid.Row="1"

                 TextWrapping="Wrap" Text="Scrivi qui" VerticalAlignment="Top" Width="290" />

        <StackPanel Name="mioStkpnl" HorizontalAlignment="Left" Height="180

            "VerticalAlignment="Top" Width="310" Grid.Column="2"

            Margin="57,270,0,0" Background="LightBlue"  Grid.RowSpan="2"

            Visibility="Collapsed">

            <TextBox Name="txtMsgBox" Text ="Sei sicuro?" FontSize="20"

             IsEnabled="False"/>

            <Button Name="Btn1" Height="50" Width="245" Margin="25,10"

             FontSize="22" Content="OK" Background="Green"/>

            <Button Name="Btn2" Height="50" Width="245" Margin="25,10"

            FontSize="22" Content="Annulla" Background="Gold"/>

        </StackPanel>

    </Grid>

</Page> 

Come già visto nel post precedente l’aspetto della MessageBox qui emulata è grossomodo questo:

Esci dal propgramma?

 

OK

 

Annulla

 

 

Il listato precedente è lasciato al commento autogestito (v. se proprio occorre, il mio post precedente in questo blog). Faccio solo osservare l’utilizzo di uno stile comune per la banda dei quattro (da puls1 a puls4).

Nota. L’argomento Visibility evidenziato deriva da un’altra scomparsa, quella dell’opzione “Hidden”. Fino a ieri essa permetteva di mantenere, a progetto, la vista sull’oggetto, poi occultato a run-time. Pazienza, ci si arrangia…

VB

Il codice dietro le quinte (code behind) ha finalità puramente esemplificativo. Il click sui pulsanti da puls1 a puls3, etichettati, il primo, “Pulsante1”, e “Alterna Puls1 gli altri due, richiama una medesima routine AlternaConentPuls1 di evidente mestiere altalenante. Chi ne ha voglia può sostituire in essa finalità più nobili e/o spettacolari.

Public NotInheritable Class MainPage

    Inherits Page

. . . .  eccetera . . .

 

Private Sub AlternaContentPuls1()

        Static sw As Boolean

        sw = Not sw

        If sw Then

            puls1.Content = "Ciao"

        Else

            puls1.Content = "Pulsante1"

        End If

    End Sub

 

    Private Sub puls1_Click(sender As Object, e As RoutedEventArgs) Handles puls1.Click

        AlternaContentPuls1()

    End Sub

 

    Private Sub puls2_Click(sender As Object, e As RoutedEventArgs) Handles puls2.Click

        AlternaContentPuls1()

    End Sub

 

    Private Sub puls3_Click(sender As Object, e As RoutedEventArgs) Handles puls3.Click

        AlternaContentPuls1()

    End Sub

 

Il clou del marchingegno o, se si vuole, del tormentone in gioco sta nel codice che segue.

Private Sub CelaSvela(Cela As Boolean)

        Dim VettPuls() = {puls1, puls2, puls3, puls4, miaCas}

        For Each puls In VettPuls

            If Cela Then

                puls.Visibility = Windows.UI.Xaml.Visibility.Collapsed

            Else

                puls.Visibility = Windows.UI.Xaml.Visibility.Visible

            End If

        Next

End Sub

    Private Sub puls4_Click(sender As Object, e As RoutedEventArgs) Handles puls4.Click

        txtMsgBox.Text = "Esci dal programma?"

        mioStkpnl.Visibility = Windows.UI.Xaml.Visibility.Visible

        CelaSvela(True)

    End Sub

    Private Sub Btn1_Click(sender As Object, e As RoutedEventArgs) Handles Btn1.Click

        Application.Current.Exit()

    End Sub

 

    Private Sub Btn2_Click(sender As Object, e As RoutedEventArgs) Handles Btn2.Click

        Dim VettPuls() = {puls1, puls2, puls3, puls4, miaCas}

        CelaSvela(False)

        mioStkpnl.Visibility = Windows.UI.Xaml.Visibility.Collapsed

    End Sub

End Class

 

Per pigrizia ma anche per non offendere la gente anche di media competenza qui pervenuta mi limito notarilmente a quel che accade, ossia la comparsa, scatenata dal puls4, del mioStkpnl con la fatidica domanda “Esci dal programma?” nella casella in alto, seguita dalla sparizione dei controlli puls1,. . . puls3 più la casella di testo miaCas. A quel punto escono dall’ombra btn1 e btn1. Il secondo etichettato “Annulla” inverte la sceneggiata nascondi/riappari, il primo etichettato “OK”lancia l’istruzione evidenziata, che chiude senza complimenti il programmetto, pardon la piccola app.

Print | posted on venerdì 1 febbraio 2013 18:10 |

Feedback

No comments posted yet.

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 5 and 5 and type the answer here:

Powered by:
Powered By Subtext Powered By ASP.NET