阻止Visual Studio设计器添加类扩展

时间:2016-08-28 03:09:35

标签: c# visual-studio

我开始学习C#了。我精通php和其他网络相关语言。我开始创建一个登录窗口,我想要做的第一件事就是创建一个可以有占位符的文本框。

我假设我必须创建一个新类,它是TextBox的扩展,下面的所有内容似乎都可以正常工作,除非我使用设计器编辑或移动其中一个文本框,它会向InitializeComponent添加一行()部分指定文本应该是什么颜色,并且(自然地)覆盖我的新类设置它的任何内容,现在它是可以的,因为它与我想要的颜色相同。但是,如果我想使用我的类更改所有占位符文本框的颜色,它添加的那一行将只保留特定的框旧颜色,这似乎完全违背面向对象编程的想法,因为现在我必须手动返回并更改InitializeComponent()部分中的所有文本框而不仅仅是类,所以我知道我一定做错了。

这是我的新班级,忽略我做过的任何其他不会影响我的问题的奇怪事情,除非你也想帮助它,但就像我说我刚开始学习(昨天实际上),我的SelectionStart和长度不起作用,但我没有那么远,看看是怎么回事。

class PlaceHolderTextBox : System.Windows.Forms.TextBox
{
    private string defaultText;
    public bool isPassword = false;
    public string DefaultText {
        get
        {
            return defaultText;
        }
        set
        {
            defaultText = value;
            addPlaceHolder();
        }
    }
    private void removePlaceholder()
    {
        Text = "";
        ForeColor = System.Drawing.Color.Black;
        if (isPassword)
        {
            PasswordChar = '\u2022';
        }
    }
    private void addPlaceHolder()
    {
        Text = defaultText;
        SelectionStart = 0;
        SelectionLength = 0;
        ForeColor = System.Drawing.Color.FromArgb(160, 160, 160);
        if (isPassword)
        {
            PasswordChar = '\0';
        }
    }
    private void placeHolderBox_KeyDown(object sender, System.EventArgs e)
    {
        if (this.Text == defaultText)
        {
            removePlaceholder();
        } 
    }
    private void placeHolderBox_KeyUp(object sender, System.EventArgs e)
    {
        if (this.Text == "")
        {
            addPlaceHolder();
        }
    }
    private void placeHolderBox_Leave(object sender, System.EventArgs e)
    {
        if (this.Text == "")
        {
            addPlaceHolder();
        }
    }
    public PlaceHolderTextBox()
    {
        KeyDown += new System.Windows.Forms.KeyEventHandler(placeHolderBox_KeyDown);
        KeyUp += new System.Windows.Forms.KeyEventHandler(placeHolderBox_KeyUp);
        Leave += new System.EventHandler(placeHolderBox_Leave);
    }
}

这是它添加到我的login.designer文件

的行
this.passwordBox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(160)))), ((int)(((byte)(160)))), ((int)(((byte)(160)))));

经过一些谷歌搜索后,我发现可能会出现只有设计师使用的代码,说占位符颜色是新的“默认”颜色,这样设计师就不会添加该行。但如果这是真的,我无法弄清楚在我的代码中把它放在哪里。

0 个答案:

没有答案