enum-C# 一个全局变量总是自动变成初始值

问题描述

C# 一个全局变量总是自动变成初始值

C# 一个全局变量总是自动变成初始值
如题,在class中定义了一个枚举类型的变量,

    public partial class XXXXDlg : Form
    {
        private enum POSOFITEMICONSTYLE
        {
            POSLARGEICONS,
            POSSMALLICONS,
            POSLIST,
            POSTITLE,
            POSDETAILS
        };
        private static POSOFITEMICONSTYLE iCurrentSelectedItemIconStyle = new POSOFITEMICONSTYLE ( );
    }

我在某些方法中给iCurrentSelectedItemIconStyle赋过值了(调试时也确实看到它的值已经改变了),但当用到iCurrentSelectedItemIconStyle时,它又变成了初始值POSLARGEICONS。
赋值时和使用时,当前的Form是没有关闭的,Form周期还没有结束的。。。
小弟新手,一直没搞明白这是为什么,所以来向各位大神求救。

解决方案

和form关闭没有关闭没有关系,静态变量的生存周期是贯穿整个程序的。
所以你应该检查你在别的地方有没有重新对它设置值,比如构造函数,formload或者别的类。

解决方案二:

不用static 的时候,也是这样的现象。。

解决方案三:

static变量,当你访问到它所在的类时,就会被初始化

解决方案四:

我估计你是多次赋值了,把iCurrentSelectedItemIconStyle做成get,set属性,在set中设置个断点或进行监视看看是什么时候赋值改变了原值吧

时间: 2024-08-04 14:28:50

enum-C# 一个全局变量总是自动变成初始值的相关文章

c语言,为什么我定义了一个全局变量,总是会自动变为零?

问题描述 c语言,为什么我定义了一个全局变量,总是会自动变为零? #include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> #include<conio.h> int score=0,move=0,a[4][4]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},temp[5],highest_score=0; void print(void

如何定义自动编号字段的初始值和步进值?

问题: 如何定义自动编号字段的初始值和步进值?如何定义自动增加字段的初始值和步进值?如何使删除过数据的自动增加字段的开始值重新从1开始? 回答: 通过以下语句,你可以在建表的时候指定其起始值和步进值:CREATE TABLE tblNewOrder2 ( OrderId AUTOINCREMENT (1000, 10), ItemId LONG, Quantity LONG) 你也可以用下面的语句修改下一个起始值和步进值:ALTER TABLE tblOrder ALTER COLUMN Ord

新手请教一个c的问题,关于指针赋初始值

问题描述 新手请教一个c的问题,关于指针赋初始值 #includeint main(){ char *p=NULL; scanf(""%s""p); printf(""%s""p); return 0;}这段代码我在ios的终端下运行就提示Segmentation fault:11但是不给p赋初值的话..改称char *p;反而好使了..为什么...请教别人说是编译器的问题.能不能稍微详细的说一下为什么.. 解决方案 要先弄清

ios开发-sqlite存进一个NSDate会自动转为一个时间戳

问题描述 sqlite存进一个NSDate会自动转为一个时间戳 为什么SELECT * FROM Table WHERE createdTime >= '2015-06-26 10:00:16 +0000'查询不出数据 解决方案 时间可以直接这么比较大小嘛? 解决方案二: sqlite不支持data类型 最好你存进去的nsdate转换成时间戳,然后查询的适合可以根据时间戳查 或者你转换成格式化字符 例如yyyy-MM-dd hh:mm:ss,然后查询的适合就按字符来查

c++,一个全局变量数组,在程序运行阶段,都要用到,什么时候进行delete[]?

问题描述 c++,一个全局变量数组,在程序运行阶段,都要用到,什么时候进行delete[]? 在我的c++代码中,有3个全局变量的数组,假设分别为a[],b[],c[] 它们保存的是三维图像,所以size都不小,size=512*512*512; 我在头文件中声明,在.cpp文件初始化中有语句: a=new int[size]; b=new int[size]; c=new int[size]; 然后我的这个程序就是为了观察这三幅图像,也就是说程序运行后,用户会随时点击按钮显示这三幅图像中任一一

如何再一个全局变量里捕获异常

问题描述 如何再一个全局变量里捕获异常 static { try { public static FileOutputStream fileOut = new FileOutputStream("D:/输出/" + fileName + "_main" + ".xlsx"); } catch (Exception e) { throw new ExceptionInInitializerError(e); } } 我这么写 提示 变量 fileO

c++-“使用拷贝初始化时,只能提供一个初始值”是什么意思?

问题描述 "使用拷贝初始化时,只能提供一个初始值"是什么意思? <C++ Primer>第五版,中文版.88 页. 提供两个初始值是什么样的? when we use the copy initialization form (i.e., when we use =) (§ 3.2.1, p. 84), we can supply only a single initializer; 解决方案 你不可能用两个值来初始化对象吧 解决方案二: 这句话的意思是当你是用拷贝初始化的

javascript-js 一个全局变量,在一个函数中进行赋值,调用另一个函数 ,这个全局变量的值却没有值为undined

问题描述 js 一个全局变量,在一个函数中进行赋值,调用另一个函数 ,这个全局变量的值却没有值为undined var typer; function zhe(){ typer = 'spline'; search(); } function search() { var jsonXData = []; var jsonyD = []; $.ajax({ url : base + '/gateBrandCount/statisticsbySpecial.html', data : $('#for

嵌入式-AT24CXX使用之前每一个字节都要先初始化为0吗,

问题描述 AT24CXX使用之前每一个字节都要先初始化为0吗, 怎么定义一个变量,吧这个变量给24cxx的某一个字节,而这个变量只执行一下,不然下一个再把这个变量给24cxx的时候,24cxx里面的数就又变了,只需要初始化一次, 解决方案 没看明白你想要表达什么意思,根据你的标题理解你想问AT24CXX使用之前是否初始化.AT24CXX是eeprom使用前不必初始化,直接写数据即可,如果你非要初始化为特定的值,可以再做AT24CXX初始化中添加一个函数,这个函数目的是初始化完毕iic,在初始化A