C#中如何将Color存储到变量重复使用?TreeNode颜色赋值为何无效?
问题根源&解决方案
嘿,我一眼就瞅出你这问题大概率出在哪了!
你的颜色变量声明和赋值逻辑本身没毛病,但**LoadSomething()方法的调用时机肯定不对**!咱捋捋代码执行顺序:
- 程序先把
Color1和Color2初始化成new Color()——这玩意儿其实是Color.Empty,就是完全透明的颜色,肉眼根本看不到 - 接着调用
InitializeComponent(),如果这个方法里直接调用了LoadSomething(),或者触发了某个会调用它的控件事件 - 最后才在构造函数里把
Color1和Color2改成你要的白色和自定义红
这就导致LoadSomething()执行的时候,Color1和Color2还是透明的空颜色,赋值给TreeNode自然啥效果都没有;而你直接写Color.White这种硬编码的颜色,是系统现成的有效颜色,所以能正常显示。
两种修复方法任你选
方法一:提前给颜色变量赋值
把颜色赋值的代码挪到InitializeComponent()前面,这样调用LoadSomething()时变量已经是正确的颜色了:
public Form1 () { // 先把颜色变量搞定 Color1 = Color.White; Color2 = Color.FromArgb(255, 112, 114); // 再初始化组件 InitializeComponent(); }
方法二:让LoadSomething()在构造完成后再跑
比如把它放到Form的Load事件里调用,确保构造函数的赋值都完成了:
public Form1 () { InitializeComponent(); Color1 = Color.White; Color2 = Color.FromArgb(255, 112, 114); // 绑定窗体加载事件 this.Load += Form1_Load; } private void Form1_Load(object sender, EventArgs e) { // 等窗体加载完再调用 LoadSomething(); }
另外给你个小建议:Color是值类型,没必要一开始用new Color()初始化,直接声明变量就行,比如:
public Color Color1; public Color Color2;
这样更简洁,还能避免一开始的空颜色带来的混淆~
内容的提问来源于stack exchange,提问作者Patric
相关产品推荐
相关产品推荐

