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

C# WinForms:实现按钮显示类实例中的字符串变量

优化C# WinForms按钮显示Move实例DisplayName的实现方案

嘿,我来帮你把这段重复的按钮赋值逻辑优化得更简洁可靠,同时完美实现需求~

首先,先确认你的Move类的DisplayName是公共可访问的(如果是字段的话,建议改成属性更符合C#规范):

public class Move
{
    // 公共属性,让外部可以访问DisplayName
    public string DisplayName { get; set; }

    // 你的其他类成员...
}

然后,你原来的代码重复了大量的try-catch块,不仅冗余还不好维护。我们可以用批量处理的方式来简化逻辑:

// 第一步:把所有要赋值的按钮放到一个数组里,顺序对应playerMoves的索引
Button[] moveButtons = new Button[] { m1, m2, m3, m4 };

// 第二步:循环遍历按钮数组,批量处理赋值和显示逻辑
for (int i = 0; i < moveButtons.Length; i++)
{
    try
    {
        // 先做前置检查:避免playerMoves为空、索引越界、Move实例为空的情况
        if (playerMoves != null && i < playerMoves.Length && playerMoves[i] != null)
        {
            moveButtons[i].Text = playerMoves[i].DisplayName;
            moveButtons[i].Visible = true; // 赋值成功就显示按钮
        }
        else
        {
            // 没有对应Move实例就隐藏按钮
            moveButtons[i].Visible = false;
        }
    }
    catch (Exception)
    {
        // 出现任何异常都隐藏按钮
        moveButtons[i].Visible = false;
    }
}

这样做的好处:

  • 减少冗余代码:以后要加更多按钮,只要在moveButtons数组里添加新按钮即可,不用重复写try-catch
  • 提前规避异常:通过前置的null和索引检查,减少进入catch块的概率,代码更高效
  • 逻辑统一:所有按钮的显示/隐藏逻辑保持一致,不容易出错

额外注意事项:

  • 确保playerMoves是已经初始化的List<Move>或Move[],不要为null
  • 如果playerMoves的元素数量可能少于按钮数量,循环会自动处理超出索引的按钮,直接隐藏它们

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:41:15