【问题标题】:C# WINFORMS - Making a button display a string variable from a class instantiationC# WINFORMS - 使按钮显示来自类实例化的字符串变量
【发布时间】:2018-05-06 18:42:04
【问题描述】:

我正在制作一个基于文本的基本格斗游戏。我有一个名为 move 的课程。我的班级有一个名为DisplayName 的字符串变量。我有这个代码:

        try
        {
            m1.Text = playerMoves[0].displayName;
        }
        catch (Exception)
        {
            m1.Visible = false;
        }
        try
        {
            m2.Text = playerMoves[1].displayName;
        }
        catch (Exception)
        {
            m2.Visible = false;
        }
        try
        {
            m3.Text = playerMoves[2].displayName;
        }
        catch (Exception)
        {
            m3.Visible = false;
        }
        try
        {
            m4.Text = playerMoves[3].displayName;
        }
        catch (Exception)
        {
            m4.Visible = false;
        }
        try
        {
            m5.Text = playerMoves[4].displayName;
        }
        catch (Exception)
        {
            m5.Visible = false;
        }
        try
        {
            m6.Text = playerMoves[5].displayName;
        }
        catch (Exception)
        {
            m6.Visible = false;
        }

此代码位于开始战斗的按钮单击事件中。 m1、m2、m3、m4、m5、m6都是按键。它们都在运行上述代码之前显示的隐藏面板中。

所以,我有一个 List 集合,其中包含类移动的实例。在我的 Form1_Load 事件中,我从 XML 文件加载用户的动作。我还有一个名为user 的类。它包含用户级别和其他内容。每当你赢得一场战斗时,你都会根据你的等级获得一个动作。它将它添加到 playerMoves 集合中。
但由于某种原因,它只显示第一个按钮。如果我浏览我的代码,它不会进入捕获状态,但它使第二个按钮(我正在使用第二个按钮测试它)从 playerMoves[1] 获取 DisplayName,但是当我的表单在我之后恢复时浏览完代码,它只显示第一个按钮。
在我运行上面的代码之前,我已经确保所有按钮都已经可见,所以任何人都可以向我解释我的代码有什么问题吗?我完全迷路了。

【问题讨论】:

  • 你为什么在你的代码中使用多次尝试和捕获
  • 因为,我这样做是一种查看是否存在移动的方式。
  • 如果我在 playerMoves 中只有一个动作,那么只会显示一个按钮。这就是所有 try-catch 正在做的事情。
  • 在尝试部分设置可见为真。
  • 如果您尝试但它不起作用,请告诉我

标签: c# winforms button


【解决方案1】:

我不认为这是使用 try & catch 的好方法。您可以使用 if else 条件,如下所示。并考虑到所有按钮默认设置为 false。

if(!String.IsNullOrEmpty(Convert.ToString(playerMoves[0].displayName)))    
           {
             m1.Text = playerMoves[0].displayName;
             m1.Visible=true;
           }
            else
           {
             m1.Visible=true;
           }

【讨论】:

  • 但是如果 playerMoves[0].displayName 已经是字符串,为什么还要将它转换为字符串?
  • 因为它处理空异常
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-19
  • 2019-09-26
  • 2021-10-19
相关资源
最近更新 更多