Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

comment tester si l'élément sélectionné dans une listbox à changé ?

3 réponses
Avatar
Pascal
Bonjour Voilà un morceau de code qui me pose problème :

Dans le programme un nombre est généré dans l'interval donné par la valeur
de nudNumMin et nudNumMax . Dans l'interface utilisateur on peut créer
plusieurs "projets" apparaissant dans un listbox qui ont chacun leurs
caractéristiques. En cliquant sur le projet dans le listbox, les contrôles
affichent les valeurs retenues pour ce projet.
Si dans le projet A nudNumMax vaut 20 et nudNumMin vaut 15 et que dans le
projet B nudNumMax vaut 10 et nudNumMin vaut 5: quand je passe de l'un à
l'autre cela déclenche le message d'alerte et corrige mes données alors que
cela ne devrait pas vu que min est bien inférieur à max au sein du même
projet...

Comment faire pour ne tester les valeurs renvoyées par les numericupdown
controls qu'au sein d'un même projet mais pas quand on change de projet en
cliquant dans le list box ?

private void lbxMaze_SelectedIndexChanged( object sender, EventArgs e )
{
int iSelected = lbxMaze.SelectedIndex;

if( iSelected >= 0 )
{
MazeItemData item = lbxMaze.Items[ iSelected ] as
MazeItemData;
_currParam = item;
SetMazeGroupControls();
if( Properties.Settings.Default.MarkCurrentMaze )
ValueChanged( false );
}

HandleMazeListButtons();
}


private void nudNumMin_ValueChanged(object sender, EventArgs e)
{

if (nudNumMin.Value >= nudNumMax.Value)
{
MessageBox.Show("La valeur minimale doit être inférieure à
la valeur maximale.", "Valeur invalide ", MessageBoxButtons.OK);

nudNumMin.Value = nudNumMax.Value - 1;
}

_currParam.GenerationData.NumberMin = (int)nudNumMin.Value;
ValueChanged(true);
}

private void nudNumMax_ValueChanged(object sender, EventArgs e)
{
if (nudNumMax.Value <= nudNumMin.Value)
{
MessageBox.Show("La valeur maximale doit être supérieure à
la valeur minimale.", "Valeur invalide ", MessageBoxButtons.OK);

nudNumMax.Value = nudNumMin.Value + 1;
}
_currParam.GenerationData.NumberMax = (int)nudNumMax.Value;
ValueChanged(true);
}


MERCI DE VOTRE AIDE
pascal
--
http://www.scalpa.info
http://scalpa98.blogspot.com/
http://scalpa-production.blogspot.com/

3 réponses

Avatar
Jean-Michel Berthier
Bonjour,
A mon avis, c'est dans SetMazeGroupControls() que cela se passe.
Le contrôle updown ne doit pas être correctement réinitialisé.


"Pascal" a écrit dans le message de
news:
Bonjour Voilà un morceau de code qui me pose problème :

Dans le programme un nombre est généré dans l'interval donné par la valeur
de nudNumMin et nudNumMax . Dans l'interface utilisateur on peut créer
plusieurs "projets" apparaissant dans un listbox qui ont chacun leurs
caractéristiques. En cliquant sur le projet dans le listbox, les contrôles
affichent les valeurs retenues pour ce projet.
Si dans le projet A nudNumMax vaut 20 et nudNumMin vaut 15 et que dans le
projet B nudNumMax vaut 10 et nudNumMin vaut 5: quand je passe de l'un à
l'autre cela déclenche le message d'alerte et corrige mes données alors
que cela ne devrait pas vu que min est bien inférieur à max au sein du
même projet...

Comment faire pour ne tester les valeurs renvoyées par les numericupdown
controls qu'au sein d'un même projet mais pas quand on change de projet en
cliquant dans le list box ?

private void lbxMaze_SelectedIndexChanged( object sender, EventArgs e )
{
int iSelected = lbxMaze.SelectedIndex;

if( iSelected >= 0 )
{
MazeItemData item = lbxMaze.Items[ iSelected ] as
MazeItemData;
_currParam = item;
SetMazeGroupControls();
if( Properties.Settings.Default.MarkCurrentMaze )
ValueChanged( false );
}

HandleMazeListButtons();
}


private void nudNumMin_ValueChanged(object sender, EventArgs e)
{

if (nudNumMin.Value >= nudNumMax.Value)
{
MessageBox.Show("La valeur minimale doit être inférieure à
la valeur maximale.", "Valeur invalide ", MessageBoxButtons.OK);

nudNumMin.Value = nudNumMax.Value - 1;
}

_currParam.GenerationData.NumberMin = (int)nudNumMin.Value;
ValueChanged(true);
}

private void nudNumMax_ValueChanged(object sender, EventArgs e)
{
if (nudNumMax.Value <= nudNumMin.Value)
{
MessageBox.Show("La valeur maximale doit être supérieure à
la valeur minimale.", "Valeur invalide ", MessageBoxButtons.OK);

nudNumMax.Value = nudNumMin.Value + 1;
}
_currParam.GenerationData.NumberMax = (int)nudNumMax.Value;
ValueChanged(true);
}


MERCI DE VOTRE AIDE
pascal
--
http://www.scalpa.info
http://scalpa98.blogspot.com/
http://scalpa-production.blogspot.com/



Avatar
Pascal
Voici le code en question :
dans cette partie du code min et max sont initialisés avec les données
contenues dans les contrôles up down
private void SetMazeGroupControls()
{
_boInitilizing = true;

// misc
chbNewRow.Checked = _currParam.NewRow;
nudMazeCount.Value = (decimal)_currParam.Count;

// generation
nudMazeWidth.Value =
(decimal)_currParam.GenerationData.CarreWidth;
nudNumMin.Value = (decimal)_currParam.GenerationData.NumberMin;
nudNumMax.Value = (decimal)_currParam.GenerationData.NumberMax;
nudCellSize.Value = (decimal)_currParam.ExerciseData.CellSize;

// Exercise parameters
chbExerciceShowCible.Checked =
_currParam.ExerciseData.ShowCible;
pnlExerciceCibleColor.BackColor =
_currParam.ExerciseData.CibleColor;
chbExerciseShowNumbers.Checked =
_currParam.ExerciseData.ShowNumbers;
pnlExerciseNumberColor.BackColor =
_currParam.ExerciseData.NumberColor;
chbExerciseShowSolution.Checked =
_currParam.ExerciseData.ShowSolution;
pnlExerciseSolutionColor.BackColor =
_currParam.ExerciseData.SolutionColor;
chbExerciseShowWalls.Checked =
_currParam.ExerciseData.ShowWalls;
nudExerciseWallWidth.Value =
(decimal)_currParam.ExerciseData.WallWidth;

// Solution parameters
chbSolutionShowCible.Checked =
_currParam.SolutionData.ShowCible;
pnlSolutionCibleColor.BackColor =
_currParam.SolutionData.CibleColor;
chbSolutionShowNumbers.Checked =
_currParam.SolutionData.ShowNumbers;
pnlSolutionNumberColor.BackColor =
_currParam.SolutionData.NumberColor;
chbSolutionShowSolution.Checked =
_currParam.SolutionData.ShowSolution;
pnlSolutionSolutionColor.BackColor =
_currParam.SolutionData.SolutionColor;
chbSolutionShowWalls.Checked =
_currParam.SolutionData.ShowWalls;
nudSolutionWallWidth.Value =
(decimal)_currParam.SolutionData.WallWidth;

_boInitilizing = false;
}

Je crois que je dois "intercepter" si c'est faisable en C# (que je
tripatouille depuis peu...)l'évènement SelectedIndexChanged afin de passer
ou non par la condition qui compare les valeurs de min et de max ? non ?
voir plus bas dans le code....
--
http://www.scalpa.info
http://scalpa98.blogspot.com/
http://scalpa-production.blogspot.com/

"Jean-Michel Berthier" a écrit dans le message de
news:
Bonjour,
A mon avis, c'est dans SetMazeGroupControls() que cela se passe.
Le contrôle updown ne doit pas être correctement réinitialisé.


"Pascal" a écrit dans le message de
news:
Bonjour Voilà un morceau de code qui me pose problème :

Dans le programme un nombre est généré dans l'interval donné par la
valeur de nudNumMin et nudNumMax . Dans l'interface utilisateur on peut
créer plusieurs "projets" apparaissant dans un listbox qui ont chacun
leurs caractéristiques. En cliquant sur le projet dans le listbox, les
contrôles affichent les valeurs retenues pour ce projet.
Si dans le projet A nudNumMax vaut 20 et nudNumMin vaut 15 et que dans le
projet B nudNumMax vaut 10 et nudNumMin vaut 5: quand je passe de l'un à
l'autre cela déclenche le message d'alerte et corrige mes données alors
que cela ne devrait pas vu que min est bien inférieur à max au sein du
même projet...

Comment faire pour ne tester les valeurs renvoyées par les numericupdown
controls qu'au sein d'un même projet mais pas quand on change de projet
en cliquant dans le list box ?

private void lbxMaze_SelectedIndexChanged( object sender, EventArgs e )
{
int iSelected = lbxMaze.SelectedIndex;

if( iSelected >= 0 )
{
MazeItemData item = lbxMaze.Items[ iSelected ] as
MazeItemData;
_currParam = item;
SetMazeGroupControls();
if( Properties.Settings.Default.MarkCurrentMaze )
ValueChanged( false );
}

HandleMazeListButtons();
}


private void nudNumMin_ValueChanged(object sender, EventArgs e)
{
si dans la list box l'indice à changer je ne fais pas la portion de code
du SI pour comparer min et max
if (nudNumMin.Value >= nudNumMax.Value)
{
MessageBox.Show("La valeur minimale doit être inférieure à
la valeur maximale.", "Valeur invalide ", MessageBoxButtons.OK);

nudNumMin.Value = nudNumMax.Value - 1;
}

_currParam.GenerationData.NumberMin = (int)nudNumMin.Value;
ValueChanged(true);
}

private void nudNumMax_ValueChanged(object sender, EventArgs e)
{
if (nudNumMax.Value <= nudNumMin.Value)
{
MessageBox.Show("La valeur maximale doit être supérieure à
la valeur minimale.", "Valeur invalide ", MessageBoxButtons.OK);

nudNumMax.Value = nudNumMin.Value + 1;
}
_currParam.GenerationData.NumberMax = (int)nudNumMax.Value;
ValueChanged(true);
}


MERCI DE VOTRE AIDE
pascal
--
http://www.scalpa.info
http://scalpa98.blogspot.com/
http://scalpa-production.blogspot.com/






Avatar
Jean-Michel Berthier
Bonjour,
Je ne vois pas d'initialisation du contrôle Updown, mais juste des variables
nudNumMin et nudNumMax :
(numericUpDown1).Minimum = nudNumMin.Value;
(numericUpDown1).Maximum = nudNumMax.Value;


"Pascal" a écrit dans le message de
news:
Voici le code en question :
dans cette partie du code min et max sont initialisés avec les données
contenues dans les contrôles up down
private void SetMazeGroupControls()
{
_boInitilizing = true;

// misc
chbNewRow.Checked = _currParam.NewRow;
nudMazeCount.Value = (decimal)_currParam.Count;

// generation
nudMazeWidth.Value =
(decimal)_currParam.GenerationData.CarreWidth;
nudNumMin.Value = (decimal)_currParam.GenerationData.NumberMin;
nudNumMax.Value = (decimal)_currParam.GenerationData.NumberMax;
nudCellSize.Value = (decimal)_currParam.ExerciseData.CellSize;

// Exercise parameters
chbExerciceShowCible.Checked =
_currParam.ExerciseData.ShowCible;
pnlExerciceCibleColor.BackColor =
_currParam.ExerciseData.CibleColor;
chbExerciseShowNumbers.Checked =
_currParam.ExerciseData.ShowNumbers;
pnlExerciseNumberColor.BackColor =
_currParam.ExerciseData.NumberColor;
chbExerciseShowSolution.Checked =
_currParam.ExerciseData.ShowSolution;
pnlExerciseSolutionColor.BackColor =
_currParam.ExerciseData.SolutionColor;
chbExerciseShowWalls.Checked =
_currParam.ExerciseData.ShowWalls;
nudExerciseWallWidth.Value =
(decimal)_currParam.ExerciseData.WallWidth;

// Solution parameters
chbSolutionShowCible.Checked =
_currParam.SolutionData.ShowCible;
pnlSolutionCibleColor.BackColor =
_currParam.SolutionData.CibleColor;
chbSolutionShowNumbers.Checked =
_currParam.SolutionData.ShowNumbers;
pnlSolutionNumberColor.BackColor =
_currParam.SolutionData.NumberColor;
chbSolutionShowSolution.Checked =
_currParam.SolutionData.ShowSolution;
pnlSolutionSolutionColor.BackColor =
_currParam.SolutionData.SolutionColor;
chbSolutionShowWalls.Checked =
_currParam.SolutionData.ShowWalls;
nudSolutionWallWidth.Value =
(decimal)_currParam.SolutionData.WallWidth;

_boInitilizing = false;
}

Je crois que je dois "intercepter" si c'est faisable en C# (que je
tripatouille depuis peu...)l'évènement SelectedIndexChanged afin de passer
ou non par la condition qui compare les valeurs de min et de max ? non ?
voir plus bas dans le code....
--
http://www.scalpa.info
http://scalpa98.blogspot.com/
http://scalpa-production.blogspot.com/

"Jean-Michel Berthier" a écrit dans le message de
news:
Bonjour,
A mon avis, c'est dans SetMazeGroupControls() que cela se passe.
Le contrôle updown ne doit pas être correctement réinitialisé.


"Pascal" a écrit dans le message de
news:
Bonjour Voilà un morceau de code qui me pose problème :

Dans le programme un nombre est généré dans l'interval donné par la
valeur de nudNumMin et nudNumMax . Dans l'interface utilisateur on peut
créer plusieurs "projets" apparaissant dans un listbox qui ont chacun
leurs caractéristiques. En cliquant sur le projet dans le listbox, les
contrôles affichent les valeurs retenues pour ce projet.
Si dans le projet A nudNumMax vaut 20 et nudNumMin vaut 15 et que dans
le projet B nudNumMax vaut 10 et nudNumMin vaut 5: quand je passe de
l'un à l'autre cela déclenche le message d'alerte et corrige mes données
alors que cela ne devrait pas vu que min est bien inférieur à max au
sein du même projet...

Comment faire pour ne tester les valeurs renvoyées par les numericupdown
controls qu'au sein d'un même projet mais pas quand on change de projet
en cliquant dans le list box ?

private void lbxMaze_SelectedIndexChanged( object sender, EventArgs e )
{
int iSelected = lbxMaze.SelectedIndex;

if( iSelected >= 0 )
{
MazeItemData item = lbxMaze.Items[ iSelected ] as
MazeItemData;
_currParam = item;
SetMazeGroupControls();
if( Properties.Settings.Default.MarkCurrentMaze )
ValueChanged( false );
}

HandleMazeListButtons();
}


private void nudNumMin_ValueChanged(object sender, EventArgs e)
{
si dans la list box l'indice à changer je ne fais pas la portion de code
du SI pour comparer min et max
if (nudNumMin.Value >= nudNumMax.Value)
{
MessageBox.Show("La valeur minimale doit être inférieure
à la valeur maximale.", "Valeur invalide ", MessageBoxButtons.OK);

nudNumMin.Value = nudNumMax.Value - 1;
}

_currParam.GenerationData.NumberMin = (int)nudNumMin.Value;
ValueChanged(true);
}

private void nudNumMax_ValueChanged(object sender, EventArgs e)
{
if (nudNumMax.Value <= nudNumMin.Value)
{
MessageBox.Show("La valeur maximale doit être supérieure
à la valeur minimale.", "Valeur invalide ", MessageBoxButtons.OK);

nudNumMax.Value = nudNumMin.Value + 1;
}
_currParam.GenerationData.NumberMax = (int)nudNumMax.Value;
ValueChanged(true);
}


MERCI DE VOTRE AIDE
pascal
--
http://www.scalpa.info
http://scalpa98.blogspot.com/
http://scalpa-production.blogspot.com/