为了账号安全,请及时绑定邮箱和手机立即绑定

当我尝试制作自定义文本框时,密码字符不起作用

当我尝试制作自定义文本框时,密码字符不起作用

C#
潇潇雨雨 2021-07-14 17:53:13
我做了一个自定义,TextBox这样我就可以让它有边框,这很好用......问题是我想设置PasswordChar为*,但不起作用这是我的代码:public  class TextBoxEx : TextBox{    // The TextBox    private TextBox textBox = new TextBox();    // Border color of the textbox    private Color borderColor = Color.Gray;    // Ctor    public TextBoxEx()    {        this.PasswordChar ='*';        this.Paint += new PaintEventHandler(TextBoxEx_Paint);        this.Resize += new EventHandler(TextBoxEx_Resize);        textBox.Multiline = true;        textBox.BorderStyle = BorderStyle.None;        this.Controls.Add(textBox);        this.UseSystemPasswordChar = true;        InvalidateSize();    }    // Exposed properties of the textbox    public override string Text    {        get { return textBox.Text; }        set { textBox.Text = value; }    }    // ... Expose other properties you need...    // The border color property    public Color BorderColor    {        get { return borderColor; }        set { borderColor = value; Invalidate(); }    }    // Expose the Click event for the texbox    public event EventHandler TextBoxClick    {        add { textBox.Click += value; }        remove { textBox.Click -= value; }    }    // ... Expose other events you need...    private void TextBoxEx_Resize(object sender, EventArgs e)    {        InvalidateSize();    }    private void TextBoxEx_Paint(object sender, PaintEventArgs e)    {        ControlPaint.DrawBorder(e.Graphics, this.ClientRectangle, borderColor, ButtonBorderStyle.Solid);    }    private void InvalidateSize()    {        textBox.Size = new Size(this.Width - 2, this.Height - 2);        textBox.Location = new Point(1, 1);    }}通常,当我尝试默认设置自定义控件的属性时,它不起作用,例如,如果我设置this.ReadOnly=true;这也行不通。所以问题不在于PasswordChar它本身。有人知道解决方案吗?
查看完整描述

2 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

我要尝试一下,


private TextBox textBox = new TextBox();


...


this.Controls.Add(textBox);

上面好像有问题


看起来你的阴影文本框实际上是什么显示,


如果您在后台需要阴影属性(并且不知道您的目标),那么最好创建您需要的属性。


查看完整回答
反对 回复 2021-07-31
?
开满天机

TA贡献1786条经验 获得超13个赞

由于该类本身继承了TextBox该类,因此您无需创建内部文本框。

考虑到这一点,您可以取出 的声明private TextBox textBox,并将对该成员的引用替换为this,因为它this是一个TextBox后代。

在构造函数中,您还将删除,this.Controls.Add(textBox);因为不再需要添加内部控件。

Text也可以删除覆盖的属性,因为它不会向TextBox定义添加功能。

InvalidateSize方法需要重新设计,因为调整Size成员会触发TextBoxEx_Resize处理程序方法,该InvalidateSize方法再次调用该方法,最终导致StackOverflowException.

最后一件事,也是重要的一件事。根据MSDN ...

如果Multiline属性设置为 true,则设置 PasswordChar 属性没有视觉效果。当 PasswordChar 属性设置为 true 时,无论 Multiline 属性设置为 true 还是 false,都无法使用键盘在控件中执行剪切、复制和粘贴操作。

这意味着如果文本框是多行文本框 PasswordCharacter 将不会显示


查看完整回答
反对 回复 2021-07-31
  • 2 回答
  • 0 关注
  • 245 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信