简体   繁体   中英

C# I'm not sure what to do next to pull the information from both comboboxes

I'm not sure where to go next for this project. The calculate button should use the conversion calculations, but I'm not quite sure how to go about it, and I can't find any relevant answers since its pulling the data from two combo boxes.
Also, the combo-boxes should change based on what the user picks. So, for example, if the user chooses "in" from the first combo-box, they should not be able to choose "in" from the second combo-box.

If someone could point me in the right direction, I would be very appreciative.

public partial class Form1 : Form
{
    const double mi_To_km = 1.6093;
    const double Km_To_mi = 0.6214;
    const double ft_To_m = 0.3048;
    const double m_To_ft = 3.2808;
    const double in_To_cm = 2.54;
    const double cm_To_in = 0.3937;
    const double ft_To_mi = 1 / mi_To_ft;
    const double mi_To_ft = 5280;

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

        cboFrom.Items.Clear(); //clear the combobox

        string[,] measurements =  
        {  {"in"}, {"ft"}, {"mi"}, {"cm"}, {"m"}, {"km"} };


        foreach (string str in measurements)
        {
            cboFrom.Items.Add(str);
        }

        foreach (string str in measurements)
        {
            cboTo.Items.Add(str);
        }

    }

    public bool IsDecimal(TextBox txtEntry, string entry)
    {
        try
        {
            Convert.ToDecimal(txtEntry.Text);
            return true;
        }

        catch (FormatException)
        {
            MessageBox.Show(entry + " must be a decimal value.", "Entry Error");
            txtEntry.Focus();
            return false;
        }
    }

    private void btnCalculate_Click(object sender, EventArgs e)
    {

        int from = cboFrom.SelectedIndex;
        int to = cboTo.SelectedIndex;


    }

    private void btnReset_Click(object sender, EventArgs e)
    {
        foreach (var c in this.Controls)
        {
            if (c is TextBox)
            {
                ((TextBox)c).Text = String.Empty;
            }
        }
        cboFrom.SelectedIndex = 0;
        cboTo.SelectedIndex = 0;
    }

    private void btnExit_Click(object sender, EventArgs e)
    {
        this.Close();
    }

}

}

You can use SelectedIndexChanged event like this:

    private void cboFrom_SelectedIndexChanged(object sender, EventArgs e)
    {
        btnCalculate.Enabled = true;

        if (cboTo.SelectedItem != null)
        {
            if (cboFrom.SelectedItem.ToString() == cboTo.SelectedItem.ToString())
            {
                btnCalculate.Enabled = false;
            }
        }
    }

    private void cboTo_SelectedIndexChanged(object sender, EventArgs e)
    {
        btnCalculate.Enabled = true;

        if (cboFrom.SelectedItem != null)
        {
            if (cboFrom.SelectedItem.ToString() == cboTo.SelectedItem.ToString())
            {
                btnCalculate.Enabled = false;
            }
        }
    }

To achieve this you will need to modify your code:

    string[] measurements = { "in", "ft", "mi", "cm", "m", "km" };

    private void Form1_Load(object sender, EventArgs e)
    {

        foreach (string str in measurements)
        {
            cboFrom.Items.Add(str);
        }

        foreach (string str in measurements)
        {
            cboTo.Items.Add(str);
        }
    }

    private void cboFrom_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (cboTo.SelectedItem == null)
        {
            cboTo.Items.Clear();

            foreach (string str in measurements)
            {
                cboTo.Items.Add(str);
            }

            cboTo.Items.RemoveAt(cboFrom.SelectedIndex);
        }
        else
        {
            if (cboFrom.SelectedItem.ToString() == cboTo.SelectedItem.ToString())
            {
                cboTo.Items.Clear();

                foreach (string str in measurements)
                {
                    cboTo.Items.Add(str);
                }

                cboTo.Items.RemoveAt(cboFrom.SelectedIndex);
            }
        }
    }

    private void cboTo_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (cboFrom.SelectedItem == null)
        {
            cboFrom.Items.Clear();

            foreach (string str in measurements)
            {
                cboFrom.Items.Add(str);
            }

            cboFrom.Items.RemoveAt(cboTo.SelectedIndex);
        }
        else
        {
            if (cboTo.SelectedItem.ToString() == cboFrom.SelectedItem.ToString())
            {
                cboFrom.Items.Clear();

                foreach (string str in measurements)
                {
                    cboFrom.Items.Add(str);
                }

                cboFrom.Items.RemoveAt(cboTo.SelectedIndex);
            }
        }
    }

I would add this code:

    private void btnCalculate_Click(object sender, EventArgs e)
    {
        int from = GetIndex(cboFrom.SelectedItem.ToString());
        int to = GetIndex(cboTo.SelectedItem.ToString());


    }

    private int GetIndex(string _measure)
    {
        int _index = -1;

        switch (_measure)
        {
            case "in":
                _index = 0;
                break;
            case "ft":
                _index = 1;
                break;
            case "mi":
                _index = 2;
                break;
            case "cm":
                _index = 3;
                break;
            case "m":
                _index = 4;
                break;
            case "km":
                _index = 5;
                break;
        }

        return _index;
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM