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.