【问题标题】:Comparing string from label and input(textBox) and showing result in label. Plus operation on array比较标签和输入(文本框)中的字符串并在标签中显示结果。数组上的加号操作
【发布时间】:2021-08-11 08:02:28
【问题描述】:

我正在用 Windows 窗体编写一个 FlashCard 应用程序。

现在我正在尝试从字符串数组中读取单词并将其传递给标签。然后要求用户写下这个词的翻译。最后将结果传递给标签框。

这是我的代码:

   public partial class EnglishPolishScreen : Form
{
    //English words array
    string[] words = new string[] { "word1", "word2", "word3", "word4" };
    // meanings words array
    string[] wordB = new string[] { "slowo1", "slowo2", "slowo3", "slowo4" };

    int element = 0;
    Thread thread;


    public EnglishPolishScreen()
    {
        InitializeComponent();
    }

    private void CloseAppEvent(object sender, FormClosingEventArgs e)
    {
        Application.Exit();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        thread = new Thread(Threadd);
        thread.Start();
    }
    private void Threadd()
    {
        englishWord.Text = words[element];
        counterLabel.Text = element + 1 + " of " + words.Length;
        if (answerBox.Text.Equals(wordB[element]))
        {
            resultLabel.Text = "Good";
            element++;
        }
        else
            resultLabel.Text = "Bad";

        if (element == words.Length)
        {
            element = 0;
        }
    }

    private void EnglishPolishScreen_Load(object sender, EventArgs e)
    {
        englishWord.Text = words[element];

    }

已编辑
伙计们,为什么我必须在按钮中单击两次才能看到数组中的下一个项目?为什么我可以在单击按钮后立即看到“错误”的答案?第二次点击后会出现“好”的答案。

已编辑 v2.xD 排序。无论如何,编写这样的代码是一种好方法吗?如果不是它怎么可能看起来更好?谢谢

问候

【问题讨论】:

  • 当你遇到一个好的答案时,你不会停止循环。因此,在获得正确的条目后,您检查下一个条目。这是错误的。
  • 尝试在后台线程中运行 UI 函数通常是不好的做法。 UI 应该由单个线程处理,如果您需要有后台线程,那么应该实现某种消息传递。在您的情况下,我看不出需要后台线程的任何原因。
  • 您要做的第一件事是删除您在某处设置的 BackgroundWorker 和 CheckForIllegalCrossThreadCalls = false。 -- 不要尝试使用 WinForms 应用程序,因为它是控制台应用程序。该界面是事件驱动的,在控制台应用程序中用于获取用户输入的循环在这里不起作用。
  • 非常感谢你 ;)
  • 这个代码看起来怎么样?我该如何改进它?

标签: c# winforms loops textbox label


【解决方案1】:

单击按钮时,它会遍历整个 for 循环,即整个含义列表,一旦找到正确的匹配项,您就必须中断 for 循环。所以只需在resoultLabel.Text = "Good answer!"; 之后使用break;。同样正如@Neil 所指出的,在单独的后台线程中使用 UI 并不好。

顺便说一句,我无法理解chances 的逻辑。为了提供机会,您必须声明一个全局变量,当在遍历整个 for 循环后发现错误答案时,该变量将被添加/减去,不允许对该词进行任何进一步的试验。

【讨论】:

  • 非常感谢你 ;)
猜你喜欢
  • 2015-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多