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

C#中如何将Color存储到变量重复使用?TreeNode颜色赋值为何无效?

问题根源&解决方案

嘿,我一眼就瞅出你这问题大概率出在哪了!

你的颜色变量声明和赋值逻辑本身没毛病,但**LoadSomething()方法的调用时机肯定不对**!咱捋捋代码执行顺序:

  1. 程序先把Color1和Color2初始化成new Color()——这玩意儿其实是Color.Empty,就是完全透明的颜色,肉眼根本看不到
  2. 接着调用InitializeComponent(),如果这个方法里直接调用了LoadSomething(),或者触发了某个会调用它的控件事件
  3. 最后才在构造函数里把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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:06:30