所以代码的其余部分工作正常但是当它到达你必须从下拉菜单中选择预定值的部分时,它不会显示我的选项,而是允许用户选择他们的自己的。
namespace A2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
comboBox1.Items.Add("15%");
comboBox1.Items.Add("18%");
comboBox1.Items.Add("20%");
}
private void button1_Click(object sender, EventArgs e)
{
double amount, tax, tip, total, final;
amount = double.Parse(textBox1.Text);
tax = amount * 0.1;
labelTax.Text = tax.ToString();
total = amount + tax;
labelTotal.Text = total.ToString();
tip = amount * double.Parse(comboBox1.Text);
labelTip.Text = tip.ToString();
final = amount + tip + tax;
labelFinal.Text = final.ToString();
}
}
}
答案 0 :(得分:1)
当用户更改组合框中的选择时,将触发SelectedIndexChanged
事件。使用上面的代码,只要他们选择新项目,您就可以再添加3个。
但是,现在看来,当表单加载时,组合框为空,因此该事件永远不会触发(没有选择的选项)。然后,正如您所提到的,用户可以自己键入内容。
要解决此问题,您可能希望将该代码移至Form_Load
事件中。这样,组合框将从一开始就添加项目。您还可能希望将DropDownStyle
设置为DropDownList
,这将阻止用户输入组合框。然后,您可以将SelectedIndex
设置为0
,以便选择第一个项目:
private void Form1_Load(object sender, EventArgs e)
{
comboBox1.Items.Add("15%");
comboBox1.Items.Add("18%");
comboBox1.Items.Add("20%");
comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
comboBox1.SelectedIndex = 0;
}
您将遇到的另一个问题是将百分号作为comboBox项目文本的一部分。 double.Parse()
不知道该如何处理。为了解决这个问题,您可以使用string.Replace()
方法将%字符替换为空字符串,然后再解析为double。
此外,您需要将整数除以100,以便将其视为百分比:
tip = amount * (double.Parse(comboBox1.Text.Replace("%", "")) / 100);
答案 1 :(得分:0)
使用数据绑定并具有强类型值的另一种方法
使用decimal
作为资金相关计算的类型
public class Tax
{
public decimal Value { get; }
public string Text { get => Value.ToString("0.## '%'"); }
public Tax(decimal value)
{
Value = value;
}
}
private void Form1_Load(object sender, EventArgs e)
{
var taxes = new[]
{
new Tax(15),
new Tax(18),
new Tax(20),
}
comboBox1.ValueMember = "Value";
comboBox1.DisplayMember = "Text";
comboBox1.DataSource = taxes;
comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
comboBox1.SelectedValue = 15;
}
然后在按钮单击中,您可以访问所选值
var selectedTax = (decimal)combobox.SelectedValue;
或者您可以获得整个选定的对象
var selectedTax = (Tax)combobox.SelectedItem;