我有一个文本框。文本框包含guid的模式,如下所示:
{0000000-0000-0000-0000-000000000000}
我希望输入文本框的用户只用它们的值替换零。
F.e。 我键入“ABC123456789”GUID应该看起来像{ABC1234-5678-9000-0000-000000000000}
我尝试过类似的事情:
string tmp = "";
tmp = textBox1.Text.Substring(replaceIndex, 1);
if (textBox1.Text.Length > replaceIndex)
{
Console.WriteLine(tmp);
if (tmp == "-")
replaceIndex++;
textBox1.Select(replaceIndex, 1);
replaceIndex++;
}
部分有效。我有用户删除字符的问题。 F.E.如果我的GUID包含: {ABC1234-5 | 678-9000-0000-000000000000}
我的光标位于“ | ”。如果我按退格键(或标记子串f.e. C1234并按删除)我想删除5并再次替换为0。
我想我的索引遇到了一些麻烦,或者我的逻辑是完全错误的。请告诉我,如果是的话。
我试图解决它:
if (e.KeyChar == (char)Keys.Back)
{
replaceIndex--;
int tmpIndex = replaceIndex;
string xReplace = defaultGUID.Substring(tmpIndex, 1);
textBox1.Text = textBox1.Text.Insert(tmpIndex, xReplace);
}
也许有一个完全不同的解决方案来解决我没想过的问题。提前谢谢。
//编辑:使用WindowsForms。
答案 0 :(得分:1)
正如你所说,MaskedTextbox是我需要的提示。 如果其他人有同样的问题,这是我的解决方案基于Panagiotis Kanavos的答案。非常感谢你。
MaskBox.Mask = "{00000000-0000-0000-0000-000000000000}";
MaskBox.PromptChar = '0';
并且,为了确保我总是获得完整的GUID,即使没有填充,我也用零替换空格:
MaskBox.Text.Replace(" ", "0");
因为您只从文本框中获取填充的部分,例如: 0123 ____-____-____- 3210 _____
感谢您的支持。我会将你的答案标记为正确,但你发表了评论。
最好的问候