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
相关产品推荐
相关产品推荐

