基于这个主题:
Adding inputbox-like control to XNA game
不确定这是否是一个ressurect但我需要一个输入文本框为我的monogame项目,但我
运行metro应用程序版本,任何关于如何绕过它的线索?我一直在尝试建立
我自己的gui,但我无法弄清楚如何将文本范围限制在文本框图像的末尾
宽度,也无法弄清楚如何使用左侧
将当前文本索引移动到更早的点使用右箭头键盘键或更远的箭头,任何人都可以帮我解决这个问题吗?
提前感谢您的帮助! 亲切的问候, Romulo Romero
答案 0 :(得分:2)
我假设您想要一个单行文本框 - 这比多行更容易,因为您不需要自动换行 - 并且您已经找到了键和字符输入。
我没有使用过monogame,但是不久前我为xna做了一个输入框,所以我希望这会有所帮助。
您要做的是定义背景矩形(也可以是图像),并记住文本光标(也称为工字梁指针)位置。这是光标所在文本的字符,以及您输入新输入字符的位置。所以现在在代码中,这里是你在Textbox类中需要的变量(假设你将使用一个类,这将是最简单的):
string text = ""; //Start with no text
int cursorPos = 0;
//These are set in the constructor:
SpriteFont font;
Rectangle backRect;
现在您可以开始处理字符输入。无论何时输入字符,您都希望将其插入光标位置。但是你也想检查新文本是否不长于后面矩形的宽度,所以这就是代码的代码:
public void CharEntered(char c)
{
string newText = text.Insert(cursorPos, c.ToString()) //Insert the char
//Check if the text width is shorter than the back rectangle
if (font.MeasureString(newText).X < backRect.Width)
{
text = newText; //Set the text
cursorPos++; //Move the text cursor
}
}
现在你要做的就是处理键输入,并在按下左箭头键或右箭头键时更改cursorPos。并绘制文本等,但这些东西很简单;)
希望这有帮助! 〜卢卡