2016-08-28 52 views
0

我有一个非法位置和不能从这些位置移动的字符列表。我将如何防止在TextChanged事件中修改这些内容?我提出的每一个解决方案都非常黑客和不可靠,或者依赖于KeyDown事件,它不会阻止用户以其他方式删除只读文本(选择文本并删除它,或者只是按退格键)。c中部分只读文本框#

我想过做这样的:

//CharPos is a class with an int (CharPos.Position) and a char that 
//should be at that int's position (CharPos.Ch) 
foreach (CharPos p in IllegalPositions) 
{ 
    console.Text = console.Text.Remove(p.Position, 1); 
    console.Text = console.Text.Insert(p.Position, p.Ch.ToString()); 
} 

但它完全打乱了,去上一个无限循环。即使我停止这样做,如果您通过使用删除键来更改文本的字符数,它也不起作用。也许我可以用某种方式使用正则表达式? (我不知道,我没有任何经验与正则表达式)。

+1

什么是IllegalPositions?提供示例。位置和字符是否应该永久保留在文本框中,并且用户在它们之间输入了字符?提供更多细节。提供您使用的实际代码和实际输入。 –

+0

对不起,我觉得这很清楚。我现在无法访问我的主PC,因此暂时不能添加任何代码。 IllegalPositions是字符串中的位置列表(由CharPos定义,一个包含表示位置的int的类以及是原始字符的Ch)。他们应该永久保留,是的,用户应该能够在前后写文本,但不会覆盖或删除这些职位中的任何字符。 – user2950509

+0

什么是'console.Text'?我只知道C#中的'Console.Write'或'Console.WriteLine'。你的foreach循环对我来说看起来不错。它在特定位置移除然后添加角色。我没有看到问题。我需要更多细节。应用程序MVC,WebForms?你是否使用带自动回发功能的asp:TextBox? –

回答

0

你可以结合多个文本框(可编辑部分)与TextBlocks(只读部分)?你只需要两个造型相匹配

+0

我试过这样做,但它增加了绝对吨的其他问题...:/ – user2950509

+0

你有什么问题? –

0

能否请您查看下面的链接玩:

Disabling or making it readonly a part of the values in a Text Box (.net)

rtBox.Select(0, (rtBox.Text = "I am fixed content").Length); 
rtBox.SelectionProtected = true; 
rtBox.AppendText(Environment.NewLine); 
+0

RichTextBox在UWP中不存在:/ – user2950509

+0

TextBox怎么样?以前的解决方案:[append-dynamic-string](http://stackoverflow.com/questions/32977054/how-can-i-add-run-text-xx-to-textbox-c-or-how-can-i -append-dynamic-string) –

+0

这篇文章实际上并没有提供一个解决方案,但没有使用RichEditBox,它在uwp中没有SelectionProtected:/ – user2950509