You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让ListBox项对应数值并传递至TextBox?计算器开发求助

解决ListBox天数选项转数值计算停车费的问题

嘿,我懂你现在的困扰——ListBox里的选项是带文字的“第1天”到“第14天”,但你需要把它们对应成数字来计算费用,之前直接处理double报错,只处理字符串又达不到计算目的对吧?

其实核心问题是你得先从带文字的选项里提取出纯数字,再转成数值类型计算,直接把“第3天”这种字符串转double肯定会报错,因为里面有非数字字符。下面给你两种简单可靠的实现思路,拿C# WinForms举例(其他类似UI框架逻辑也差不多):

方法一:直接替换固定字符提取数字

因为你的选项格式是固定的“第X天”,所以可以直接把“第”和“天”这两个固定字符去掉,剩下的就是数字字符串,再转成整数:

private void listBoxDays_SelectedIndexChanged(object sender, EventArgs e)
{
    // 先判断是否有选中项,避免空引用错误
    if (listBoxDays.SelectedItem == null)
    {
        textBoxResult.Text = "";
        return;
    }

    string selectedItemText = listBoxDays.SelectedItem.ToString();
    // 去掉固定文字,提取数字部分
    string dayNumberStr = selectedItemText.Replace("第", "").Replace("天", "");
    
    // 用TryParse安全转换,避免格式错误时抛出异常
    if (int.TryParse(dayNumberStr, out int days))
    {
        const double dailyRate = 20.0;
        double totalCost = days * dailyRate;
        // 可以选择格式化货币显示,或者直接显示数值
        textBoxResult.Text = totalCost.ToString("C"); // 显示为$60.00这种格式
        // 如果不需要货币格式,就用 textBoxResult.Text = totalCost.ToString();
    }
    else
    {
        textBoxResult.Text = "请选择有效天数";
    }
}

方法二:用正则表达式提取数字(适合格式不固定的情况)

如果以后你的选项格式可能变化(比如改成“Day 3”或者“3天”),用正则提取数字会更灵活:

private void listBoxDays_SelectedIndexChanged(object sender, EventArgs e)
{
    if (listBoxDays.SelectedItem == null)
    {
        textBoxResult.Text = "";
        return;
    }

    string selectedItemText = listBoxDays.SelectedItem.ToString();
    // 匹配字符串里的所有数字
    var numberMatch = System.Text.RegularExpressions.Regex.Match(selectedItemText, @"\d+");
    
    if (numberMatch.Success && int.TryParse(numberMatch.Value, out int days))
    {
        const double dailyRate = 20.0;
        double totalCost = days * dailyRate;
        textBoxResult.Text = totalCost.ToString("C");
    }
    else
    {
        textBoxResult.Text = "请选择有效天数";
    }
}

为什么之前会报错?

你之前直接处理double报错,大概率是尝试把“第3天”这种包含非数字字符的字符串直接转成double,比如double.Parse("第3天"),这种操作肯定会抛出格式异常。必须先提取纯数字部分,再进行类型转换,才能正常计算。

另外用TryParse代替Parse会更稳妥,就算出现意外的选项格式,程序也不会崩溃,而是友好提示错误。

内容的提问来源于stack exchange,提问作者Sang Nguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:54:33