簡體   English   中英

C#嘗試使用組合框中的選定值

[英]C# Trying to use a selected value from the combo box

因此,其余代碼工作正常,但是當您需要從下拉菜單中的預定值中進行選擇時,它不會顯示我的選項,而是允許用戶選擇自己的選項。

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();
        }
    }
}

當用戶在組合框中更改選擇時,將觸發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()將不知道該怎么辦。 為了解決此問題,可以在分析為double之前,使用string.Replace()方法用空字符串替換百分比字符。

此外,您需要將該整數除以100,以便將其視為百分比:

tip = amount * (double.Parse(comboBox1.Text.Replace("%", "")) / 100);

使用數據綁定並具有強類型值的另一種方法。
使用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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM