IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

ComboxBoxIndex et Image.source [Débutant]


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mars 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 5
    Par défaut ComboxBoxIndex et Image.source
    Bonjour,

    Je suis débutant dans le C# et je souhaite utiliser les index d'une combobox pour changer la source du conteneur d'image (application WPF) .

    J'aimerai qu'au lancement de l'application l'index zéro soit par défaut et qu'il affiche l'image par défaut également.

    Ci-dessous mon code qui génère une exception au lancement de l'application au niveau de la première condition : "La référence de l'objet n'est pas définie à une instance d'un objet"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    private void _Combobox_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                try
                {
     
                    if  (_Combobox.SelectedIndex == 0) // index par défaut
                    {
                        _Image.Source = new BitmapImage(new Uri("/WpfApp1;component/Images/Tube.JPG", UriKind.Relative))
                    }
                    else if (_Combobox.SelectedIndex == 1)
                    {
                        _Image.Source = new BitmapImage(new Uri("/WpfApp1;component/Images/Cone.JPG", UriKind.Relative));
     
                    }
                    else if (_Combobox.SelectedIndex == 2)
                    {
                        _Image.Source = new BitmapImage(new Uri("/WpfApp1;component/Images/Sphère.JPG", UriKind.Relative));
     
                    }
                    else if (_Combobox.SelectedIndex == 3)
                    {
                        _Image.Source = new BitmapImage(new Uri("/WpfApp1;component/Images/Cuboïde.JPG", UriKind.Relative));
     
                    }
                }
     
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message + "Event on _Combobox_SelectionChanged");
                }

    Merci d'avance.

    Peter

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Bonjour,

    Tu es sûr que ta ComboBox s'appelle _Combobox_SelectionChanged ? Parce que _Combobox_SelectionChanged.SelectedIndex ça me paraît bizarre ...

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mars 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 5
    Par défaut
    Citation Envoyé par ebastien Voir le message

    Tu es sûr que ta ComboBox s'appelle _Combobox_SelectionChanged ? Parce que _Combobox_SelectionChanged.SelectedIndex ça me paraît bizarre ...
    Bonjour Ebastien,

    Oui, désolé j'ai fais un mauvais copy/paste. Je viens de modifier le code, merci.

    Quoi qu'il en soit, mon problème reste le même.

    Aurais-tu une piste autre piste de résolution ?

    Peter.

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Ton code n'est pas censé planter. Lorsque tu mets un point d'arrêt sur ta première condition, c'est _Combobox qui est null ?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mars 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 5
    Par défaut
    Citation Envoyé par ebastien Voir le message
    Ton code n'est pas censé planter. Lorsque tu mets un point d'arrêt sur ta première condition, c'est _Combobox qui est null ?
    [Point d’arrêt sur la condition 0 puis mode pas à pas] : Au lancement de l’application, l’index de ma Combobox est à 0 par défaut. Du coup, ça rentre bien dans la condition 0, mais dès que ça en sort, ça passe dans l’accolade Catch et affiche l’erreur...

    Une fois que j'ai validé l'erreur, ça se passe bien pour les autres conditions (ça affiche bien les images en fonction de l'index) mais pour la conditions 0 ça n'affiche rien...

  6. #6
    Membre expérimenté
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Par défaut
    Bonjour,

    Au lancement de l’application, l’index de ma Combobox est à 0 par défaut. Du coup, ça rentre bien dans la condition 0, mais dès que ça en sort, ça passe dans l’accolade Catch et affiche l’erreur...
    Donc, pendant la construction de ta Form, _Image ne serait pas null par hasard ?

    Tu essaye d'initialiser un objet qui n'existe pas encore.

    Bonne continuation.

  7. #7
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour

    Ce comportement peut etre evité en s'abonnant à l'event ItemContainerGenerator.StatusChanged du combo et en utilsant booleen

    ItemContainerGenerator.
    code xaml du form:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
     <Window x:Class="WpfCombo.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:sys="clr-namespace:System.Collections;assembly=mscorlib"
           xmlns:sys2="clr-namespace:System;assembly=mscorlib"
            Title="MainWindow" Height="350" Width="525">
        <Window.Resources>
            <sys:ArrayList x:Key="int32" >
                <sys2:Int32 >0</sys2:Int32>
                <sys2:Int32 >1</sys2:Int32>
                <sys2:Int32 >2</sys2:Int32>
                <sys2:Int32 >3</sys2:Int32>
            </sys:ArrayList>
     
        </Window.Resources>
        <DockPanel >
            <ComboBox 
                x:Name="myCombo"
                DockPanel.Dock="Right" Height="63"
                ItemsSource="{Binding Source={StaticResource int32}}"
                SelectionChanged="ChangeImage"/>
            <Image x:Name="img" Width="100" ></Image>
        </DockPanel> 
    </Window>
    et son code behind.cs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    namespace WpfCombo
    {
        /// <summary>
        /// Logique d'interaction pour MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
     
     
     
              myCombo.ItemContainerGenerator.StatusChanged += new EventHandler(ItemContainerGenerator_StatusChanged);
            }
            private bool etat = false;
            void ItemContainerGenerator_StatusChanged(object sender, EventArgs e)
            {
                etat = true;
                //Image par defaut
                img.Source = new BitmapImage(new Uri("/WpfCombo;component/Images/Koala.jpg", UriKind.Relative));
     
            }
     
     
     
     
     
     
            private void ChangeImage(object sender, SelectionChangedEventArgs e)
            {
                ComboBox cbo = (sender as ComboBox);
               if (!etat) return;
     
     
     
               if (cbo.SelectedIndex == 0) // index par défaut
                {
                    img.Source = new BitmapImage(new Uri("/WpfCombo;component/Images/Koala.jpg", UriKind.Relative));
                }
               else if (cbo.SelectedIndex == 1)
                {
                    img.Source = new BitmapImage(new Uri("/WpfCombo;component/Images/Penguins.jpg", UriKind.Relative));
     
                }
               else if (cbo.SelectedIndex == 2)
                {
                    img.Source = new BitmapImage(new Uri("/WpfCombo;component/Images/Lighthouse.jpg", UriKind.Relative));
     
                }
               else if (cbo.SelectedIndex == 3)
                {
                    img.Source = new BitmapImage(new Uri("/WpfCombo;omponent/Images/Tulips.jpg", UriKind.Relative));
     
                }
     
     
            }
        }
    }
    bon code...

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mars 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 5
    Par défaut
    Bonjour MABROUKI,

    je n'avais pas été notifié de ta réponse.

    Quoi qu'il en soit, merci pour ton aide. Une partie de ta solution à résolu mon problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      void ItemContainerGenerator_StatusChanged(object sender, EventArgs e)
            {
                etat = true;
                //Image par defaut
                img.Source = new BitmapImage(new Uri("/WpfCombo;component/Images/Koala.jpg", UriKind.Relative));
     
            }
    Je n'ai pas eu besoin du code en XAML.

    Merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WPF] <image source="" />
    Par Gregory.M dans le forum Windows Presentation Foundation
    Réponses: 14
    Dernier message: 04/03/2010, 17h01
  2. <Image Source="image.tif" /> ?
    Par TotorLeCastor dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 26/11/2008, 12h34
  3. Image source addresse locale
    Par chtipitou dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 02/11/2007, 08h16
  4. extraire une partie d'image d'une image source
    Par Zen_Fou dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/01/2006, 12h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo