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

如何为动态生成的CheckBox设置显示文本?

问题原因及解决方法

你的核心问题是重复使用同一个CheckBox实例:代码里仅在循环外创建了一个CheckBox对象,循环中只是不断修改它的Text属性再添加到CheckedList中。由于所有列表项指向的都是同一个对象,最终所有项的文本都会被最后一次设置的值覆盖,同时CheckedList对重复添加同一控件的处理逻辑会导致文本无法正常显示。

修正后的代码

把CheckBox的创建逻辑放到循环内部,每次循环生成新的实例:

public void GetAttributs()
{
    List<string> lstAttributs = new List<string>();
    
    lstAttributs.Add("Alifère: capacité de voler à x mètres d'altitude");
    lstAttributs.Add("Amphibien: capacité de nager à x mètres de profondeur, peut respirer sous l'eau et sur la terre");
    lstAttributs.Add("Armure naturelle: peau épaisse, jusqu'à x% de dégâts physiques absorbés par l'ennemi");
    lstAttributs.Add("Avantage du terrain: sur x terrain(s), la créature n'a pas de malus");
    lstAttributs.Add("Célérité: attaque toujours en premier lors de tour d'initiative");
    lstAttributs.Add("Corps artificiels: créature artificielle, nul besoin pour elle de respirer");
    lstAttributs.Add("Dégagement: impossible d'être encerclé");
    lstAttributs.Add("Double frappe: capacité d'attaquer deux fois par tour de jeu");
    lstAttributs.Add("Fin limier: plafond supplémentaire de 5% dans une des compétences techniques");
    lstAttributs.Add("Frigifugé: capacité de survivre à basse température jusqu'à x degrés Celsius");
    lstAttributs.Add("Gros dormeur: temps de récupération divisé par deux lors de repos");
    lstAttributs.Add("Hyperesthésie: chance de ne pas être empoisonné égale à x%");
    lstAttributs.Add("Ignifugé: capacité de survivre à haute température jusqu'à x degrés Celsius");
    lstAttributs.Add("Insubmersible: impossible d'être submergé");
    lstAttributs.Add("Lourdaud: trop lourd pour attaquer en premier, attaque en dernier");
    lstAttributs.Add("Mithridatisation: chance de ne pas être empoisonné égale à x%");
    lstAttributs.Add("Mort-vivant: ne peut pas être soigné par des moyens conventionnels (sauf repos), est obligé de dévorer un corps ou boire des fluides corporels");
    lstAttributs.Add("Porteur de charges lourdes: capacité de porter 25% la charge maximum que l'on peut porter");
    lstAttributs.Add("Prodige: plafond supplémentaire de 5% dans une des compétences naturelles");
    lstAttributs.Add("Régénération spirituelle: à chaque début de tour, 10% de l'énergie est régénérée par le lanceur");
    lstAttributs.Add("Régénération vitale: à chaque début de tour, 10% de PV régénérés pour le lanceur");
    lstAttributs.Add("Soif de bataille: plafond supplémentaire de 5% dans une des compétences de combat");
    lstAttributs.Add("Souffle: la créature est capable de cracher du feu ou n'importe quel autre élément (dégâts non magiques)");
    lstAttributs.Add("Vague de panique: fais trop peur, les adversaires doivent réussir un jet de Volonté tous les x tour(s) pour agir, mais peuvent toujours esquiver en cas d'échec");
    lstAttributs.Add("Voie libre: capacité de déplacement doublée lorsque le terrain est dégagé.");

    for(int i = 0; i < lstAttributs.Count; i++)
    {
        // 每次循环创建新的CheckBox实例
        CheckBox checkBox = new CheckBox();
        checkBox.Text = lstAttributs[i];
        chckLstAttributs.Items.Add(checkBox);
    }
}

更优方案(WinForms场景)

如果使用的是WinForms的CheckedListBox,其实无需手动创建CheckBox控件——它本身的设计就是直接添加字符串项,自动生成带复选框的列表项,代码更简洁且不易出错:

public void GetAttributs()
{
    List<string> lstAttributs = new List<string>();
    
    // 省略字符串添加逻辑,同上
    
    // 直接将字符串列表添加到CheckedListBox的Items中
    chckLstAttributs.Items.AddRange(lstAttributs.ToArray());
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 23:26:06