2011-09-15 3 views
0

J'essaie d'afficher le résultat d'une instruction if qui est basée sur l'option sélectionnée dans une zone de liste déroulante de formulaire Windows. Je rencontre des problèmes lorsque le statut if est placé dans sa propre classe séparée du formulaire et renvoie toujours la valeur else. J'ai rendu le combobox public. Mon code est le suivant.Impossible de récupérer les données de la liste déroulante.

public void button1_Click(object sender, EventArgs e) 
{ 
    xRayData xRayData1 = new xRayData(); 
    string shiftChangeValue; 
    shiftChangeValue = xRayData1.shiftChange(); 
    label2.Text = shiftChangeValue; 
} 

public string shiftChange() 
{ 
    frmSWChange frmSWChange1 = new frmSWChange(); 

    string shiftLetter; 

    if (frmSWChange1.cbShift.Text == "Day") 
    { 
     shiftLetter = "D"; 
    } 
    else if (frmSWChange1.cbShift.Text == "Night") 
    { 
     shiftLetter = "N"; 
    } 
    else if (frmSWChange1.cbShift.Text == "Morning") 
    { 
     shiftLetter = "M"; 
    } 
    else 
    { 
     shiftLetter = "ERROR"; 
    } 


    return shiftLetter; 
} 

Répondre

1

Utilisez Selected... pour obtenir l'élément sélectionné dans combobox

frmSWChange1.cbShift.SelectedItem // gets the binded item 
frmSWChange1.cbShift.SelectedText // gets the display text of the selected item 
frmSWChange1.cbShift.SelectedValue // gets the value of the selected item 
+0

Hey merci pour le commentaire, mais une fois que je change les valeurs .SelectedText je suis toujours retourne toujours la valeur d'erreur – fanle

+0

Pouvez-vous debug et regardez ce qui est stocké dans 'SelectedText'? Peut-être que tes cordes sont différentes. – Samich

+0

Où faites-vous réellement le ShowDialog() du Formulaire "frmSWChange1"? Dans le constructeur de frmSWChange? Ce serait bien de concevoir le formulaire "frmSWChange" d'une manière qui contienne une propriété publique avec la valeur sélectionnée. Cela aiderait à déboguer, à réutiliser le formulaire et à découpler -> rend votre vie plus facile. – fixagon

0

Jetez un oeil à cette ligne dans votre méthode

frmSWChange frmSWChange1 = new frmSWChange(); 

vous créez une nouvelle instance de la forme et cette on n'a rien à voir avec la sélection que vous avez faite, cela n'aura aucun texte sélectionné dans la liste déroulante. Ce dont vous avez besoin est la référence à l'instance actuelle du formulaire dans lequel ces sélections sont faites.

0

frmSWChange.cs

namespace X_Ray 
{ 
public partial class frmSWChange : Form 
{ 

    public frmSWChange() 
    { 
     InitializeComponent(); 
     frmSWChange1 
    } 

    private void btnReturnToMainMenu_Click(object sender, EventArgs e) 
    { 
     new frmMainMenu().Show(); 
     this.Close(); 
    } 

    public void button1_Click(object sender, EventArgs e) 
    { 

     string shiftChangeValue; 
     label1.Text = mtxtScrapDate.Text; 
     derpderp1 = cbShift.SelectedText; 
     xRayData xRayData1 = new xRayData(); 

     shiftChangeValue = xRayData1.shiftChange(); 
     label2.Text = shiftChangeValue; 
    } 

} 
} 

xRayData.cs

namespace X_Ray 
{ 
class xRayData 
{ 
    #region Methods 


    public string shiftChange() 
    { 
     frmSWChange frmSWChange1 = new frmSWChange(); 

     string shiftLetter; 

     if (frmSWChange1.cbShift.SelectedText == "Day") 
     { 
      shiftLetter = "D"; 
     } 
     else if (frmSWChange1.cbShift.SelectedText == "Night") 
     { 
      shiftLetter = "N"; 
     } 
     else if (frmSWChange1.cbShift.SelectedText == "Morning") 
     { 
      shiftLetter = "M"; 
     } 
     else 
     { 
      shiftLetter = "ERROR"; 
     } 


     return shiftLetter; 
    } 

    #endregion 
} 
} 
+0

Hé là, merci de poster une réponse :) Juste pour que vous sachiez, mettez l'espace des indentations sur * toutes * les lignes pour vous assurer que le code forme un bloc. Cependant, c'est parfois une bonne idée de le casser, mais si c'est le cas, donnez quelques explications. Il devrait toujours y avoir une explication au sommet. Si vous l'éditez avec une petite explication, vous obtiendrez des upvotes;) – sillyMunky

Questions connexes