单击检查按钮时如何删除/删除按钮文本?
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 中的添加/删除按钮动态添加/删除文本字段