Mateenniemi Nummi-Pusula

  Pääsivulle  |  TIETOTEKNIIKAN PÄÄSIVULLE

Alasvetovalikko (WPF)

Seuraavassa on alasvetovalikon käyttämisestä toimiva esimerkki.

Ensin on ikkunan kuvaus xaml-tiedostona ja sen jälkeen C#-koodi, joka tulee omaksi tiedostokseen. Siinä on kuvattu ikkunan toiminnallisuudet.

<!--- 2.2.2018  MainWindow.xaml-->
<Window x:Class="Comboboxtesti.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Comboboxtesti"
        mc:Ignorable="d"
        Title="Comboboxtesti" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="60" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>

        <ComboBox  Grid.Row="0"  x:Name="comboTesti" Width="200"
          VerticalAlignment="Center" HorizontalAlignment="Center"
             SelectionChanged="ComboTesti_SelectionChanged">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Nimiz}" />
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>
        <Button  Grid.Row="1" FontWeight="Bold" Content=" Mikä on valinta? "
                    Height="24" Width="180"
                    PreviewMouseLeftButtonUp="ButtonInfo_Click"/>
    </Grid>
</Window>

*************************************************************************
// 2.2.2018  MainWindow.xaml.cs   (Comboboksitesti)
//using System;
using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
//using System.Windows.Data;
//using System.Windows.Documents;
using System.Windows.Input;
//using System.Windows.Media;
//using System.Windows.Media.Imaging;
//using System.Windows.Navigation;
//using System.Windows.Shapes;

// Esimerkki comboboxin käytöstä: tiedot paikoilleen,
// valitun vaihtoehdon katsominen, action jos valitaan toinen
// Windows Presentation Format (WPF), dotnet Framework 4.5.2
// Softa koodattu: Windows 8.1, Visual Studio Community 2017

namespace Comboboxtesti
{
    // -------------------------------------------
    // 2.2.2018
    // Comboboxien sisällön yhden kentän määrittelevä luokka
    public class Combocoll
    {
        public int Nro { get; set; } = -1;       // esimerkiksi idHlo
        public string Nimiz { get; set; } = "";  // esimerkiksi nimiz
    }

    // -------------------------------------------
    // 2.2.2018
    // Varsinainen ikkunan luokka
    public partial class MainWindow : Window
    {
        bool alku;     // näytön rakentamisen tila

        public MainWindow()
        {
            alku = true;    // kohta piirretään combobox, ei haluta actionia
            InitializeComponent();

            // kerätään comboboxin sisältö tähän listaan:
            List<Combocoll> dct = new List<Combocoll>();
            for (int i=1;i<10;i++)
            {
                dct.Add(new Combocoll { Nro = i, Nimiz = $"Valinta_{i}" });
            }

            // tietolähteen määrittely comboboxille
            comboTesti.ItemsSource = dct;
            alku = false;     // näyttö on valmis
        }

        //-----------------------------------------------------------------------
        // 2.2.2018    K17
        // Käyttäjä poistui valikosta Ulkopaikka. Tarkistetaan onko kyseessä tietty tuttu paikka
        // (esim Nummi Kotipiha) ja jos on, niin laitetaan koordinaatit paikoilleen
        private void ComboTesti_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (alku)
                return;  // ohitus kun näyttöä rakennetaan

            // mikä oli valintamme
            Combocoll item = (sender as ComboBox).SelectedItem as Combocoll;

            if (item == null)
            {
                MessageBox.Show("Valinta epäonnistui", "(K17-01) Ohjelmointivirhe");
                return;
            }

            string mesz = $"Valittiin '{item.Nimiz}', ";
            mesz += $"sen id = {item.Nro}";
            MessageBox.Show(mesz, "(K17-02) Ilmoitus");
        }

        //-----------------------------------------------------------------------
        // 2.2.2018    K19
        // Käyttäjä haluaa tietää mikä on valinta
        private void ButtonInfo_Click(object sender, MouseButtonEventArgs e)
        {
            string mesz = "";
            // katsotaan mikä on nyt valittuna
            var item = (Combocoll)comboTesti.SelectedItem;
            if (item == null)
                mesz = "Ei ole mitään valittuna";
            else
            {
                mesz = $"Valittuna on '{item.Nimiz}', ";
                mesz += $"sen id = {item.Nro}";
            }
            MessageBox.Show(mesz, "(K19-02) Ilmoitus");
        }
    }
}



--------------------------------
(sivua muokattu  4.2.2018)