【问题标题】:Call a method with a string inside a text box在文本框中调用带有字符串的方法
【发布时间】:2021-10-04 22:50:50
【问题描述】:

我正在用 C# 制作一个简单的猜谜游戏,其中计算机生成一个介于 1-10 之间的数字,我得到了一个 clickEvent 和一个 KeyPressedEvent(到 Enter 键)来“提交”猜测。

我正在尝试这样做,这样您就可以在文本字段中输入“reset”,然后按 Enter 以调用 StartNewGame() 方法,但它似乎没有激活该方法。

我都试过了

if (userReset.Equals("reset"))
    {
        StartNewGame();
    }

if (userReset == "reset" )
    {
        StartNewGame();
    }

但它似乎没有调用 StartNewGame()

我在 Windows 10 上使用 Visual Studio 2019。

【问题讨论】:

  • 用户在哪个控件中输入了“reset”?

标签: c# textfield reset restart enter


【解决方案1】:

代码的问题是变量userReset设置为空字符串,没有别的:

String userReset = "";

因此,当您将其与文本 "reset" 进行比较时,结果为 false

相反,您也许应该像这样实现它:

...
string userReset = txtGuess.Text
...

if (userReset.Equals("reset"))
...

或者,根本不使用变量:

...
if (txtGuess.Text == "reset")
...

顺便说一句,我个人会在else 中使用这个int.TryParse

if (int.TryParse(txtGuess.Text, out guess))
{
    ...
}
else if (txtGuess.Text == "reset")
{
    ...
}

这是因为如果文本是一个数字,那么它将永远不会是 "reset"(反之亦然),这样就无需检查 TextBox 的值。

关于案例的进一步编辑

正如@TimSchmelter 在 cmets 中指出的那样,忽略输入文本的大小写(即使比较不区分大小写)也可能有意义,以便用户可以键入 resetResetReSeT

为此,请使用不区分大小写的比较:

else if (txtGuess.Text.Equals("reset", StringComparison.OrdinalIgnoreCase))

【讨论】:

  • 忽略大小写可能会更好:else if (txtGuess.Text.Equals("reset", StringComparison.OrdinalIgnoreCase))
  • @TimSchmelter 好主意 - 我已经更新了问题以包含此内容。我没有将其包括在内,因为 OP 在其代码中专门使用了小写 reset,但这有利于完整性。谢谢
  • 感谢您,完美运行。在我的脑海中,我一直在想我需要一个空字符串来存储结果。
  • @jp1955 不客气。如果它解决了您的问题,请确保您将此答案标记为正确,并为任何有用的答案投票
猜你喜欢
  • 1970-01-01
  • 2014-03-23
  • 1970-01-01
  • 2019-09-24
  • 2016-06-15
  • 1970-01-01
  • 2021-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多