Я использую .NET 3.5 CF и пытаюсь создать текстовое поле, которое должно скрывать написанный внутри него символ. Это работает, установив параметр PasswordChar равным «*». Однако это изменит char на a * напрямую.Создайте текстовое поле с «умным» паролем char
Что я хочу - это «умное» текстовое поле, которое меняет символ на * после задержки (приблизительно 1 секунду), что заставит пользователя получить некоторую обратную связь, в которой был написан правильный символ.
Я пробовал это, создав еще один поток, который должен обрабатывать это, так как пользователь все равно должен писать больше символов и не ждать этой задержки. Я сделал что-то вроде этого:
if (UseModernPasswordScreenMaskning)
{
this.Invoke(new UpdateTextCallback(this.UpdateText), new object[]{"*"});
}
private void UpdateText(string text)
{
int k = this.Text.Length;
System.Threading.Thread.Sleep(1000);
this.Text = this.Text.Remove(k - 1, 1);
this.Text = this.Text.Insert(k - 1, "*");
}
Это работает, но сон на моей текущей нити, которые делают следующее письмо написанной задержки на 1 секунду, прежде чем он показывает. Я хочу, чтобы каждое письмо отображалось напрямую и менялось на *, через 1 секунду после написания определенного символа.
Спасибо !, однако, когда вы делаете, как будто вы предложили мне получить сообщение об ошибке, когда код находится внутри функции «Do». «Control.Invoke» должен использоваться для взаимодействия с элементами управления, созданными в отдельном потоке ». Это я хочу, чтобы я это сделал, но не знаю, как это сделать. Текстовое поле создается в том же потоке, который является проблемой. – HappySoftwareDeveloper
i снова запустите этот код и не увидите никаких проблем, это странно – Gintama
Рад слышать, что вы решили эту ошибку! – Gintama