none
problème d’interaction entre 2 combobox RRS feed

  • Question

  • bonjour,

    bon je ne vais pas faire long, j'ai juste 2 comboBox, initialisé. quand je change une je veux vérifié si le second est pareil ou non.

    voila mon code :

    	private void comboAxePorteur1_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                if(comboAxePorteur1.SelectedIndex == comboAxePorteur2.SelectedIndex)
                    MessageBox.Show("Attention, vous avez sélectionné le même axe porteur", "Avertissement", MessageBoxButton.OK, MessageBoxImage.Exclamation);
            }

    sauf qu'il me déclenche une exception. voila son détail :

    • {"La référence d'objet n'est pas définie à une instance d'un objet."}

    je ne comprend pas d'où viendrais l'erreur. les 2 combo contiennent les mêmes données dans leurs collections

    est ce qu'il y a quelqu'un qui peux m'aider svp??

    merci d'avance :)

    • Déplacé Aurel Bera mercredi 14 novembre 2012 12:13 Off Topic (Origine :Visual C#)
    • Type modifié Aurel Bera lundi 19 novembre 2012 07:54 Pas de reponse
    • Type modifié ahmedmahdi lundi 19 novembre 2012 08:26
    mardi 13 novembre 2012 10:12

Réponses

  • hum, je peux me planter, mais pour moi cet index de sélection n’a de valeur que lors de la sélection.
     
    je pense que je ferais quelque chose du genre:
     
            int? ndx1;         int? ndx2;         private void comboAxePorteur1_SelectionChanged(object sender, SelectionChangedEventArgs e)         {                        ndx1 = comboAxePorteur1.SelectedIndex;                         if(ndx1 != null && nxd2 != null && ndx1 = ndx2)                MessageBoxMessageBox.Show("Attention, vous avez sélectionné le même axe porteur", "Avertissement", MessageBoxButton.OK, MessageBoxImage.Exclamation);         }
    en répétant bien sûr pour comboAxePorteur2.
     

    Bernard Grosperrin, Chardonnay, France.
    • Marqué comme réponse ahmedmahdi lundi 19 novembre 2012 08:26
    mercredi 14 novembre 2012 08:14

Toutes les réponses

  • Bonjour,

    Pouvez-vous nous indiquer sur quelle ligne ça plante SVP ?

    Ensuite pouvez-vous essayer cette méthode et dire si l'erreur persiste :

    private void comboAxePorteur1_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (comboAxePorteur1.Items.Count > 0 && comboAxePorteur2.Items.Count > 0)
                {
                    if (comboAxePorteur1.SelectedIndex == comboAxePorteur2.SelectedIndex)
                        MessageBox.Show("Attention, vous avez sélectionné le même axe porteur", "Avertissement", MessageBoxButtons.OK);
                }
            }
     
    Cordialement

    Merci de valider par "Proposer comme réponse" si celle-ci répond à votre demande !

    mardi 13 novembre 2012 12:15
  • Bonjour,

    Plus généralement cela indique que l'on essaie d'utiliser un objet null. Donc quand cette erreur survient le principe est d'inspecter toutes les variables présentes sur la ligne jusqu'à trouver laquelle est null (par exemple en sortant leurs valeurs dans la fenêtre "immédiate" donc ici 4 valeurs)...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".


    mardi 13 novembre 2012 12:23
  • en fait ca plante quand il y a "comboAxePorteur2"

    et quand j'essaye sur un évènement du "comboAxePorteur2" ça plante quand il y a "comboAxePorteur1"

    merci encore pour avoir pris de me répondre :)

    • Modifié ahmedmahdi mardi 13 novembre 2012 13:08
    mardi 13 novembre 2012 13:06
  • en fait j'ai même supprimer comboAxePorteur2 et je l'ai remis encore ca plante tjrs

    et comme je l'ai dit dans le précédent poste quand je fait la comparaison dans un évènement de comboAxePorteur2 il plante quand il trouve comboAxePorteur1

    merci encore pour avoir pris la peine de me répondre :)


    • Modifié ahmedmahdi mardi 13 novembre 2012 13:08
    mardi 13 novembre 2012 13:08
  • Pouvez-vous nous fournir le code complet du form svp pour vérifier d'où pourait provenir le problème ?

    Merci de valider par "Proposer comme réponse" si celle-ci répond à votre demande !

    mardi 13 novembre 2012 13:15
  • voila le code XAML :

    <Window x:Class="NewEMCI.FenetreUtilisateur.DetailCinematique"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="DetailCinematique" Height="400" Width="800" ResizeMode="NoResize">
        <Grid>
            <Image Height="162" HorizontalAlignment="Left" Margin="12,12,0,0" Name="image1" Stretch="Fill" VerticalAlignment="Top" Width="361" />
            <Image Height="162" HorizontalAlignment="Left" Margin="12,180,0,0" Name="image2" Stretch="Fill" VerticalAlignment="Top" Width="361" />
            <ComboBox Height="23" HorizontalAlignment="Left" Margin="483,17,0,0" Name="comboAxePorteur1" VerticalAlignment="Top" Width="120" SelectedIndex="0" SelectionChanged="comboAxePorteur1_SelectionChanged">
                <ComboBoxItem Content="X" />
                <ComboBoxItem Content="Y" />
                <ComboBoxItem Content="Z" />
            </ComboBox>
            <Label Content="Axe Porteur :" Height="28" HorizontalAlignment="Left" Margin="379,12,0,0" Name="label1" VerticalAlignment="Top" />
            <Label Content="Angle suivant A :" Height="28" HorizontalAlignment="Left" Margin="379,42,0,0" Name="label2" VerticalAlignment="Top" />
            <Label Content="Angle suivant B :" Height="28" Margin="379,71,0,0" Name="label3" VerticalAlignment="Top" HorizontalAlignment="Left" Width="98" />
            <Label Content="Angle suivant C :" Height="28" HorizontalAlignment="Left" Margin="379,100,0,0" Name="label4" VerticalAlignment="Top" />
            <TextBox Height="23" HorizontalAlignment="Left" Margin="483,46,0,0" Name="textAngleA1" VerticalAlignment="Top" Width="120" Text="0" PreviewTextInput="textAngleA1_PreviewTextInput" GotFocus="textAngleA1_GotFocus" LostFocus="textAngleA1_LostFocus" />
            <TextBox Height="23" HorizontalAlignment="Left" Margin="483,75,0,0" Name="textAngleB1" VerticalAlignment="Top" Width="120" Text="0" PreviewTextInput="textAngleB1_PreviewTextInput" GotFocus="textAngleB1_GotFocus" LostFocus="textAngleB1_LostFocus" />
            <TextBox Height="23" HorizontalAlignment="Left" Margin="483,104,0,0" Name="textAngleC1" VerticalAlignment="Top" Width="120" Text="0" PreviewTextInput="textAngleC1_PreviewTextInput" GotFocus="textAngleC1_GotFocus" LostFocus="textAngleC1_LostFocus" />
            <Label Content="Axe Porteur :" Height="28" HorizontalAlignment="Left" Margin="379,180,0,0" Name="label5" VerticalAlignment="Top" />
            <Label Content="Angle suivant A :" Height="28" HorizontalAlignment="Left" Margin="379,210,0,0" Name="label6" VerticalAlignment="Top" />
            <Label Content="Angle suivant B :" Height="28" HorizontalAlignment="Left" Margin="379,239,0,0" Name="label7" VerticalAlignment="Top" Width="98" />
            <Label Content="Angle suivant C :" Height="28" HorizontalAlignment="Left" Margin="379,268,0,0" Name="label8" VerticalAlignment="Top" />
            <TextBox HorizontalAlignment="Left" Margin="483,214,0,0" Name="textAngleA2" Text="0" Width="120" PreviewTextInput="textAngleA2_PreviewTextInput" GotFocus="textAngleA2_GotFocus" LostFocus="textAngleA2_LostFocus" Height="23" VerticalAlignment="Top" />
            <TextBox Height="23" HorizontalAlignment="Left" Margin="483,243,0,0" Name="textAngleB2" Text="0" VerticalAlignment="Top" Width="120" PreviewTextInput="textAngleB2_PreviewTextInput" GotFocus="textAngleB2_GotFocus" LostFocus="textAngleB2_LostFocus" />
            <TextBox Height="23" HorizontalAlignment="Left" Margin="483,272,0,0" Name="textAngleC2" Text="0" VerticalAlignment="Top" Width="120" PreviewTextInput="textAngleC2_PreviewTextInput" GotFocus="textAngleC2_GotFocus" LostFocus="textAngleC2_LostFocus" />
            <ComboBox Height="23" HorizontalAlignment="Left" Margin="483,185,0,0" Name="comboAxePorteur2" VerticalAlignment="Top" Width="120" SelectedIndex="1" SelectionChanged="comboAxePorteur2_SelectionChanged">
                <ComboBoxItem Content="X" />
                <ComboBoxItem Content="Y" />
                <ComboBoxItem Content="Z" />
            </ComboBox>
        </Grid>
    </Window>

    et le code C# :

    	private void comboAxePorteur1_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                if(comboAxePorteur1.SelectedIndex == comboAxePorteur2.SelectedIndex)
                    MessageBox.Show("Attention, vous avez sélectionné le même axe porteur", "Avertissement", MessageBoxButton.OK, MessageBoxImage.Exclamation);
            }
    merci encore :)


    • Modifié ahmedmahdi mardi 13 novembre 2012 13:19
    mardi 13 novembre 2012 13:18
  • Il faut vérifier que comboAxePorteur2 n'est pas null dans l'event handler comboAxePorteur1_SelectionChanged et vérifier que comboAxePorteur1 n'est pas null dans l'event handler comboAxePorteur2_SelectionChanged.<o:p></o:p>

    Je m'explique: étant donné que comboAxePorteur1_SelectionChanged est l'event handler de comboAxePorteur1, comboAxePorteur1 ne peut pas être null lors de l'appel de son event handler ça serait absurde dans la mesure où cette méthode ne s'exécute que lorsqu'il y a eu changement de sélection sur combpAxePorteur1 donc comboAxeProteur1 est forcément existant lorsque comboAxePorteur1_SelectionChanged est appelé. Au même titre, comboAxePorteur2 ne peut jamais être null durant l'appel de comboAxePorteur2_SelectionChanged. Cependant il peut être null lors de l'appel de comboAxePorteur1_SelectionChanged et c'est ce qui se passe dans votre cas et c'est juste parce que comboAxePorteur1 est créé avant comboAxePorteur2 et qu'au moment où comboAxePorteur1 est créé, la valeur X est sélectionnée par défaut ce qui déclenche  comboAxePorteur1_SelectionChanged alors que comboAxePorteur2 n'existe pas encore et donc il est à null d'où l'exception "La référence d'objet n'est pas définie à une instance d'un objet" Et donc le code ci-dessous devrait résoudre votre problème:<o:p></o:p>

    private void comboAxePorteur1_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (comboAxePorteur2 != null)
        {
            if (comboAxePorteur1.SelectedIndex == comboAxePorteur2.SelectedIndex)
                MessageBox.Show("Attention, vous avez sélectionné le même axe porteur", "Avertissement", MessageBoxButton.OK, MessageBoxImage.Exclamation);
        }
    }
    
    private void comboAxePorteur2_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if(comboAxePorteur1 != null)
        {
            if (comboAxePorteur1.SelectedIndex == comboAxePorteur2.SelectedIndex)
                MessageBox.Show("Attention, vous avez sélectionné le même axe porteur", "Avertissement", MessageBoxButton.OK, MessageBoxImage.Exclamation);
        }
    }

    Si ma réponse vous a été utile n'oubliez pas de la marquer.

    Cordialement,


    Blog: marouene.slimi.net

    • Proposé comme réponse Marouene Slimi mercredi 14 novembre 2012 00:58
    mercredi 14 novembre 2012 00:58
  • hum, je peux me planter, mais pour moi cet index de sélection n’a de valeur que lors de la sélection.
     
    je pense que je ferais quelque chose du genre:
     
            int? ndx1;         int? ndx2;         private void comboAxePorteur1_SelectionChanged(object sender, SelectionChangedEventArgs e)         {                        ndx1 = comboAxePorteur1.SelectedIndex;                         if(ndx1 != null && nxd2 != null && ndx1 = ndx2)                MessageBoxMessageBox.Show("Attention, vous avez sélectionné le même axe porteur", "Avertissement", MessageBoxButton.OK, MessageBoxImage.Exclamation);         }
    en répétant bien sûr pour comboAxePorteur2.
     

    Bernard Grosperrin, Chardonnay, France.
    • Marqué comme réponse ahmedmahdi lundi 19 novembre 2012 08:26
    mercredi 14 novembre 2012 08:14
  • mercredi 14 novembre 2012 12:15
  • je ne crois pas que ce soit le combo lui-même qui est null, mais le SelectedIndex.

    Bernard Grosperrin, Chardonnay, France.

    mercredi 14 novembre 2012 12:18
  • Vous pouvez utiliser une astuce:

    Mettez tout ce traitement dans un try/catch.

    Comme ça, n’importe si le combo est nulle ou selectedIndex est nul, le résultat sera correct :

    Un combo est nulle, et l’autre viens d’être changée, donc non nulle.  Et dans ce cas, le message ne sera pas affiche.

    Cordialement,


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    mercredi 14 novembre 2012 12:29
  • Bonjour,

    Est-ce que vous avez testé les solutions proposées ? Merci de partager avec nous les résultats, afin que d'autres personnes avec le même problème puissent profiter de cette solution.

    Cordialement,

    Aurel


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    vendredi 16 novembre 2012 08:18
  • Bonjour,

    Nous changeons le type de votre question à « Discussion générale » parce que vous n’êtes pas revenu avec les informations sollicitées. Si vous avez plus de temps pour réexaminer la question et fournir plus d'informations, n'hésitez pas à modifier le type du thread à « Question ». Si le problème est résolu, s’il vous plaît partagez la solution avec nous afin que la réponse puisse être trouvée et utilisée par d'autres membres de la communauté ayant des questions similaires.

    Merci !

    Cordialement,

    Aurel


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    lundi 19 novembre 2012 07:54
  • @Marouene Slimi

    bonjour,

    avant tous je voudrai m'excusez de mon retard et merci de votre aide.

    votre solution peut marché, mais dans ce cas elle ne me sert a rien puisque les 2 évènement des 2 comboBox pense que l'autre est null.

    ce qui m’étonne le plus comme vous le voyez les 2 comboBox sont initialisé chacune avec les collection "X, Y et Z" donc normalement les 2 élément ne sont pas null à l’exécution des événements

    merci encore de votre aide


    • Modifié ahmedmahdi lundi 19 novembre 2012 08:16
    lundi 19 novembre 2012 08:14
  • @BernardG7801460

    bonjour,

    avant tous je voudrai m'excusez de mon retard et merci de votre aide.

    j'ai pensé a votre solution. Elle marche nickel merci encore. je trouve bizarre qu'on doit passé par des variables intermédiaires pour faire ce genre de vérification

    merci encore de votre aide

    lundi 19 novembre 2012 08:23
  • @BernardG7801460

    bonjour,

    en faite le SelectedIndex est initialisé dès la création du comboBox je ne crois pas que cette propriété est null mais plutôt un problème de génération des 2 comboBox ou un problème de communication

    merci encore de votre aide

    lundi 19 novembre 2012 08:25
  • @Aurel Bera

    bonjour,

    un try/catch ne réglerai pas le problème parce qu'il va me faire presque le même traitement que ce lui de Marouene Slimi

    merci encore de votre aide

    lundi 19 novembre 2012 08:28
  • @Aurel Bera

    bonjour,

    oui j'ai testé la solution de BernardG7801460 et elle marche très bien. Mais je trouve bizarre qu'il n'y a pas d’interaction entre 2 comboBox.

    ca serai bien de continuer la discussion pour voir d'ou viens exactement le problème

    merci encore de votre aide



    • Modifié ahmedmahdi lundi 19 novembre 2012 08:33
    lundi 19 novembre 2012 08:31
  • Content d'avoir pu vous aider. N'oubliez pas de marquer mon message comme étant la réponse, puisqu'il semble que ce soit l cas :-)

    Bon courage pour la suite.


    Bernard Grosperrin, Chardonnay, France. http://bgsoftfactory.azurewebsites.net/

    lundi 19 novembre 2012 08:54
  • c'est fait merci encore a toi et aux autres pour avoir pris la peine de m'aider

    merci encore

    lundi 19 novembre 2012 09:00
  • hum, je peux me planter, mais pour moi cet index de sélection n’a de valeur que lors de la sélection.
     
    je pense que je ferais quelque chose du genre:
     
            int? ndx1;         int? ndx2;         private void comboAxePorteur1_SelectionChanged(object sender, SelectionChangedEventArgs e)         {                        ndx1 = comboAxePorteur1.SelectedIndex;                         if(ndx1 != null && nxd2 != null && ndx1 = ndx2)                MessageBoxMessageBox.Show("Attention, vous avez sélectionné le même axe porteur", "Avertissement", MessageBoxButton.OK, MessageBoxImage.Exclamation);         }
    en répétant bien sûr pour comboAxePorteur2.
     

    Bernard Grosperrin, Chardonnay, France.

    Attention, soit je me plante complétement, soit j'espére que ahmedmahdi aura modifié de lui même mais "ndx1 = ndx2" sera TOUJOURS vrai puisqu'il s'agit d'une affectation de variable à une autre.

    Je répète, je peux me tromper et ne pas voir l'astuce d'utiliser ici une affectation dans ce test


    #codingwithfun / .NET

    mardi 27 novembre 2012 16:21
  • Attention, soit je me plante complétement, soit j'espére que ahmedmahdi aura modifié de lui même mais "ndx1 = ndx2" sera TOUJOURS vrai puisqu'il s'agit d'une affectation de variable à une autre.

    Je répète, je peux me tromper et ne pas voir l'astuce d'utiliser ici une affectation dans ce test


    #codingwithfun / .NET

    Oui oui, trés juste, il fallait lire ndx1 == ndx2, bien sûr


    Bernard Grosperrin, Chardonnay, France. BGSoftFactory, "Le" Blog

    mardi 27 novembre 2012 20:56