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

C# WinForm页面加载时递增数字异常求助(VS2015)

解决Windows窗体中PurchaseScreen页面重新加载时UniqueNumber不递增的问题

嘿,我完全懂你碰到的这个麻烦——每次打开PurchaseScreen页面,订单号都固定显示001,哪怕只是关闭页面不退出整个应用,再打开还是从头开始,对吧?

问题根源

你原来的代码里,UniqueNumber是实例级别的私有字段:

private int UniqueNumber = 0;

这意味着每次你创建PurchaseScreen的新实例(就是PurchaseScreen ps = new PurchaseScreen();这行),这个字段都会被重新初始化回0。所以每次页面加载时UniqueNumber++都只是从0变成1,自然标签永远显示001。

修复方案

把UniqueNumber改成静态字段就搞定了!静态字段属于类本身,而不是类的某个实例,它的值会在整个应用的生命周期内保持,不会因为创建新的窗体实例而被重置:

修正后的PurchaseScreen完整代码

public partial class PurchaseScreen : Form
{
    // 改成静态字段,确保全局唯一且不会被重置
    private static int UniqueNumber = 0;

    public PurchaseScreen()
    {
        InitializeComponent();
    }

    private void PurchaseScreen_Load(object sender, EventArgs e)
    {
        UniqueNumber++;
        OrderNumber.Text = UniqueNumber.ToString("000");
    }

    private void BackButton_Click(object sender, EventArgs e)
    {
        this.Hide();
        BasketScreen bs = new BasketScreen();
        bs.Show();
    }
}

额外小建议

另外,你返回BasketScreen的时候每次都新建一个实例其实不太好,会导致内存里堆积多个窗体对象。如果想优化的话,可以在打开PurchaseScreen的时候把当前的BasketScreen实例传过去,返回的时候直接显示原来的实例就行:

比如修改BasketScreen的按钮点击事件:

private void PurchaseButton_Click(object sender, EventArgs e)
{
    this.Hide();
    // 把当前BasketScreen实例传给PurchaseScreen
    PurchaseScreen ps = new PurchaseScreen(this);
    ps.Show();
}

然后在PurchaseScreen里添加一个字段保存这个实例:

private BasketScreen _originalBasketScreen;

public PurchaseScreen(BasketScreen basketScreen)
{
    InitializeComponent();
    _originalBasketScreen = basketScreen;
}

private void BackButton_Click(object sender, EventArgs e)
{
    this.Close(); // 直接关闭当前PurchaseScreen,而不是隐藏
    _originalBasketScreen.Show();
}

这样就不会创建多余的窗体实例了,体验更流畅。

内容的提问来源于stack exchange,提问作者David McRae

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:56:12