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

Le
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/
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jean-Michel Berthier
Le #12145551
Bonjour,
A mon avis, c'est dans SetMazeGroupControls() que cela se passe.
Le contrôle updown ne doit pas être correctement réinitialisé.


"Pascal" 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/



Pascal
Le #12145541
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" 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" 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/






Jean-Michel Berthier
Le #12145521
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" 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" 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" 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/









Publicité
Poster une réponse
Anonyme