我正在使用 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/

10-13 01:34