单击复选框后如何删除/删除按钮上的文本?

时间:2019-01-22 09:47:30

标签: c# user-interface unity3d button text

我正在创建这个总和创建器,用户必须使用自定义键盘输入答案。并在复选按钮上单击,如果答案正确,则会加载新问题。

我的问题是在回答第一个问题后,答案按钮重置为空白,但是当用户键入下一个答案时,仅删除了最后一个字母(例如15个中的5个)。而当我输入14时,它显示114(先前输入答案中的1)。

我需要帮助将应答按钮文本重置为空白。

我使用按钮是因为稍后我想同时添加更多问题,以便用户可以单击并键入多个答案。

有人可以帮我吗?还请告诉我这是否是实现我想要的正确方法。

我正在调用退格功能以删除先前的答案,并将文本设置为空白。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Keyboard : MonoBehaviour
{
    string word = null;
    int wordIndex = -1;
    string alpha = null;
    string alpha2 = null;
    public Text userAnswer1 = null;
    public Text valueA, valueB;
    public Text scoreCount;
    private int a, b, answer1, score;
    char[] nameChar = new char[5];


    private void Start()
    {          
        SumCreator();
    }

    public void nameFunc (string alphabet)
    {
        wordIndex++;
        char[] keepchar = alphabet.ToCharArray();
        nameChar[wordIndex] = keepchar[0];
        alpha = nameChar[wordIndex].ToString();
        word = word + alpha;
        userAnswer1.text = word;      
    }

    public void BackspaceFunction()
    {
        if (wordIndex >= 0)
        {
            wordIndex--;

            alpha2 = null;
            for (int i = 0; i < wordIndex + 1; i++)
            {
                alpha2 = alpha2 + nameChar[i].ToString();
            }
            word = alpha2;
            userAnswer1.text = word;
        }
    }

    public void SumCreator ()
    {
        a = Random.Range(0,15);
        b = Random.Range(0,15);
        answer1 = a + b;
        valueA.text = a.ToString();
        valueB.text = b.ToString();
        scoreCount.text = "score " + score.ToString();
    }

    public void CheckAnswer()
    {
        Text buttonText = userAnswer1.GetComponentInChildren<Text>();

        if (answer1 == int.Parse(userAnswer1.text))
        {
            score++;
            // userAnswer1.text = string.Empty;
            buttonText.text = string.Empty;
        }  

        SumCreator();
    }
}

2 个答案:

答案 0 :(得分:1)

我已经编辑了答案,并删除了现在不相关的部分。

一旦单击“检查”按钮,首先擦除结果文本框中的文本,然后执行整个其他逻辑。 要擦除文本,您可以使用下一段代码:

Text buttonText = buttonName.GetComponentInChildren<Text>();
buttonText.text = string.Empty;

您可能希望将此“ buttonText”属性作为全局属性,并在程序开始时获取一次,而不是每次单击按钮时都获取它。在一个小规模的程序中,它不会有太大的区别,但这是一种正确的思维方式。

再检查一下代码后,我可以总结一下您的问题:

您的程序的整个逻辑都是有缺陷的,有许多不必要的复杂事情使它在多个地方失败。可以理解,每个人都经历了这个阶段,没有什么可羞愧或担心的。无论哪种方式,这都是我的主观意见,这可能是错误的。

回到您的代码,一旦发生任何事情,您要做的就是更新结果文本,说“ txtResult”。

单击数字后,请执行“ txtResult + = numberClicked”。

单击退格键后,删除txtResult的最后一个字符。 Here是一个有很多答案的问题,这很简单。

单击“检查”后,如果它是正确的数字,请将txtResult设置为空。

此外,每次更新txtResult时,当然也应该更新UI。假设您每次都这样做,则对于上述3种情况,更新txtResult都需要一行,而更新UI则需要一行。因此,总共有6行。在“退格”功能中检查空字符串会增加另一行。我的数学可能是错误的,但是无论哪种方式,这都是一种非常简短的方法,没有什么太复杂的。

您只是缺乏相关知识,否则您将不会在Backspace函数中做那个噩梦。

关于“ nameFunc”函数,整个6行都可以用“ txtResult + = Alphabet”代替,不是吗?我不确定您从字母参数中得到什么,但是无论哪种方式,字符串都是一个字符数组,因此您也可以执行“ txtResult + = Alphabet [0]”代替那里的内容。

因此,总的来说,您一切都很好,逻辑是正确的,您已经找到了主要方面。但是您使整个事情变得复杂了。我相信您在阅读完所有这些文字后会很好,并祝您一切顺利。

答案 1 :(得分:0)

如果您在成功输入答案后想清除Text对象,则不应调用“ BackSpace”功能。

只需将您的代码替换为此:

if (answer1 == int.Parse(userAnswer1.text))
{
    score++;
    userAnswer1.text = string.Empty;

这将清除文本元素。

您还可以考虑使用Unity中的InputFields,它们用于输入输入并自动支持退格键和其他键盘功能。 如果这样做,请确保将InputField的ContentType设置为Integer Number或Decimal Number