在字符串中填写准确的模式

Fill exact pattern in String

我有一个文本框。文本框包含一个 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。

正如您所说,MaskedTextbox 是我需要的提示。 如果其他人有同样的问题,这是我基于 Panagiotis Kanavos 的回答的解决方案。非常感谢。

MaskBox.Mask = "{00000000-0000-0000-0000-000000000000}";
MaskBox.PromptChar = '0';

并且,为了确保我始终获得完整的 GUID,即使未填充,我也将空格替换为零:

MaskBox.Text.Replace(" ", "0");

因为您只能从文本框中取回填充的部分,例如: 0123____-____-____-3210_____

感谢您的支持。我会把你的答案标记为正确的,但你发表了评论。

最诚挚的问候