亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當我嘗試制作自定義文本框時,密碼字符不起作用

當我嘗試制作自定義文本框時,密碼字符不起作用

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 關注
  • 288 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號