我正在使用 c# winforms (.NET 4,0),我想创建一个“智能”密码文本框类(或 UserControl),显示输入的字符一段时间然后屏蔽该字符。我看了这篇文章:Create a textbox with "smart" password char 并且该解决方案效果很好,但是是在 Form 类中完成的。我希望所有的功能都在一个类或用户控件中,这样它就可以简单地放到一个表单上。
我的类使用上面引用的解决方案:
using System;
using System.Drawing;
using System.Text;
using System.Threading;
using System.Windows.Forms;
/// <summary>
/// TODO: Update summary.
/// </summary>
public class SmartTextBox : TextBox
{
public SmartTextBox()
{
InitializeComponent();
}
#region Component Designer generated code
private void InitializeComponent()
{
//
// SmartTextBox
//
this.TextChanged += new EventHandler(SmartTextBox_TextChanged);
}
#endregion
System.Threading.Timer timer = null;
void SmartTextBox_TextChanged(object sender, EventArgs e)
{
base.OnTextChanged(e);
if (timer == null)
{
timer = new System.Threading.Timer(new TimerCallback(Do), null, 1000, 1000);
}
SmartTextBox tb = this as SmartTextBox;
int num = tb.Text.Length;
if (num > 1)
{
StringBuilder s = new StringBuilder(tb.Text);
s[num - 2] = '*';
tb.Text = s.ToString();
tb.SelectionStart = num;
//Debug.WriteLine("TextChanged: " + tb.Text);
}
}
public void Do(object state)
{
if (this.InvokeRequired)
{
int num = this.Text.Length;
if (num > 0)
{
StringBuilder s = new StringBuilder(this.Text);
s[num - 1] = '*';
this.Invoke(new Action(() => // <----Error on this line
{
this.Text = s.ToString();
this.SelectionStart = this.Text.Length;
timer.Dispose();
timer = null;
}));
}
}
}
}
但是当我尝试编译时,出现以下错误:
错误 CS0305:使用泛型类型“System.Action”需要 1 个类型参数
我不确定如何解决此错误,任何帮助将不胜感激。
最佳答案
改变这一行:
this.Invoke(new Action(() =>
至:
this.Invoke(new Action(delegate()
关于C# WinForms 智能密码文本框类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23296287/