在String中填充确切的模式

时间:2018-01-04 13:49:59

标签: c# replace guid

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

1 个答案:

答案 0 :(得分:1)

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

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

并且,为了确保我总是获得完整的GUID,即使没有填充,我也用零替换空格:

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

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

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

最好的问候