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

Xamarin中点击计圈按钮时在五个标签依次显示单圈耗时的问题

Xamarin秒表计圈功能修复方案

你的问题出在每次点击计圈按钮时,都会先强制覆盖displayLaps1的内容,导致后续的判断逻辑完全混乱——第二次点击时,displayLaps1永远不为空,同时又会触发displayLaps2的赋值,最终两个标签都会被设置成当前总耗时,且之前的计圈数据被覆盖。

修复方案1:顺序判断空标签(直接修改原代码)

去掉每次先给displayLaps1赋值的代码,改为按顺序检查第一个空的标签并赋值:

private void lapButton_Clicked(object sender, EventArgs e)
{
    TimeSpan ts = stopWatch.Elapsed;
    // 使用你定义好的格式化字符串,比直接ToString()更美观
    string elapsedTime = string.Format("{0:00}:{1:00}:{2:00}.{3:00}",
        ts.Hours, ts.Minutes, ts.Seconds,
        ts.Milliseconds / 10);

    // 按顺序查找第一个空标签,赋值后停止判断
    if (string.IsNullOrEmpty(displayLaps1.Text))
    {
        displayLaps1.Text = elapsedTime;
    }
    else if (string.IsNullOrEmpty(displayLaps2.Text))
    {
        displayLaps2.Text = elapsedTime;
    }
    else if (string.IsNullOrEmpty(displayLaps3.Text))
    {
        displayLaps3.Text = elapsedTime;
    }
    else if (string.IsNullOrEmpty(displayLaps4.Text))
    {
        displayLaps4.Text = elapsedTime;
    }
    else if (string.IsNullOrEmpty(displayLaps5.Text))
    {
        displayLaps5.Text = elapsedTime;
    }
}

修复方案2:用数组管理标签(更简洁易维护)

把所有计圈标签放到数组里,遍历数组找第一个空标签赋值,后续增加计圈数只需修改数组即可:

// 在页面类中定义数组,可在构造函数或初始化方法中赋值
private Label[] _lapLabels;

// 示例初始化(比如在Page构造函数里)
public YourPage()
{
    InitializeComponent();
    _lapLabels = new Label[] { displayLaps1, displayLaps2, displayLaps3, displayLaps4, displayLaps5 };
}

private void lapButton_Clicked(object sender, EventArgs e)
{
    TimeSpan ts = stopWatch.Elapsed;
    string elapsedTime = string.Format("{0:00}:{1:00}:{2:00}.{3:00}",
        ts.Hours, ts.Minutes, ts.Seconds,
        ts.Milliseconds / 10);

    // 遍历数组找第一个空标签
    foreach (var label in _lapLabels)
    {
        if (string.IsNullOrEmpty(label.Text))
        {
            label.Text = elapsedTime;
            break; // 找到后立即退出循环
        }
    }
}

额外优化:显示每圈实际耗时(而非总时间)

如果需要显示每一圈的单独耗时(不是从开始到当前的总时长),可添加变量记录上一次计圈的时间:

private TimeSpan _lastLapTime = TimeSpan.Zero;

private void lapButton_Clicked(object sender, EventArgs e)
{
    TimeSpan currentTotalTime = stopWatch.Elapsed;
    // 计算当前圈的耗时:当前总时间 - 上一次计圈时间
    TimeSpan currentLapTime = currentTotalTime - _lastLapTime;
    
    string lapTimeStr = string.Format("{0:00}:{1:00}:{2:00}.{3:00}",
        currentLapTime.Hours, currentLapTime.Minutes, currentLapTime.Seconds,
        currentLapTime.Milliseconds / 10);

    // 用方案1或方案2的逻辑赋值到空标签
    if (string.IsNullOrEmpty(displayLaps1.Text))
    {
        displayLaps1.Text = lapTimeStr;
    }
    else if (string.IsNullOrEmpty(displayLaps2.Text))
    {
        displayLaps2.Text = lapTimeStr;
    }
    // ... 后续标签判断
    
    // 更新上一次计圈时间
    _lastLapTime = currentTotalTime;
}

内容的提问来源于stack exchange,提问作者Mariah Thomas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 08:42:02