单击检查按钮时如何删除/删除按钮文本?

Posted

技术标签:

【中文标题】单击检查按钮时如何删除/删除按钮文本?【英文标题】:How to remove/delete Button text on when check button is clicked? 【发布时间】:2019-06-15 18:05:27 【问题描述】:

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

我的问题是在回答第一个问题后,答案按钮重置为空白,但是当用户键入下一个答案时,只删除最后一个字母(例如 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();
    

【问题讨论】:

C# Unity - How can I clear an InputField的可能重复 【参考方案1】:

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

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

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

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

在检查了你的代码之后,我可以总结一下你的问题:

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

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

点击一个数字后,执行“txtResult += numberClicked”。

单击退格键后,删除 txtResult 的最后一个字符。 Here 是一个有很多关于如何做到这一点的答案的问题,它真的很简单。

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

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

您只是缺乏相关知识,否则您不会在 Backspace 功能中做噩梦。

关于“nameFunc”函数,整个6行都可以替换为“txtResult += alphabet”,不是吗?我不确定你在字母参数中得到什么,但无论哪种方式,字符串都是一个字符数组,所以你也可以用 "txtResult += alphabet[0]" 代替你在那里的东西。

所以,总的来说,你没问题,逻辑是对的,你想出了主要方面。但是你把整个事情复杂化了。我相信您在阅读完所有这些文字后会没事的,并祝您一切顺利。

【讨论】:

我尝试了您的建议,但它并没有删除任何内容。仍在为上一个答案添加新答案 所以我在启动函数中添加了上面的代码并设置了string.empty,但仍然无法正常工作。 看起来你在编写这个程序的过程中做了很多改变,并尝试了不同的东西,现在它变得有点乱了。我建议你一步一步地检查你的代码并检查逻辑。无论哪种方式,在您从我的 Edit2 修复该行之后,您可能永远看不到任何答案,因此您应该将其移至“CheckAnswer”函数的开头。 好的,我会一步一步来。我在层次结构中将该按钮命名为“答案” 我现在已经在他的问题中编辑了我的代码。除了检查功能没有其他变化。【参考方案2】:

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

只需将您的代码替换为:

if (answer1 == int.Parse(userAnswer1.text))

    score++;
    userAnswer1.text = string.Empty;

这将清除文本元素。

您还可以考虑在 Unity 中使用 InputFields,它专为输入输入而设计,并自动支持退格键和其他键盘功能。 如果这样做,请确保将 InputField 的 ContentType 设置为整数或小数

【讨论】:

您提供的代码正在使用空白按钮加载下一个问题,但是当我输入新答案时,同样的事情发生了。新答案添加到上一个答案

以上是关于单击检查按钮时如何删除/删除按钮文本?的主要内容,如果未能解决你的问题,请参考以下文章

当用户以编程方式单击swift ios中的删除按钮时,如何将光标从一个文本字段自动移动到另一个文本字段?

SENCHA:如何通过单击 SENCHA touch 中的添加/删除按钮动态添加/删除文本字段

如何在单击按钮操作时更改图像

用户单击删除按钮时如何获取当前(添加)按钮

单击按钮时附加新文本字段并通过单击 Laravel 4 中的按钮删除

单击按钮时如何从本地存储中删除多维数组?