将ReadOnly属性添加到MaterialSingleLineTextField

时间:2017-04-02 11:30:52

标签: c# winforms properties controls

如何将ReadOnly属性添加到此控件?

该控件没有ReadOnly属性。 我是C#的初学者,我现在能想到的就是:

public class MaterialSingleLineTextFieldRO : MaterialSingleLineTextField
{
    public bool ReadOnly { ... };
}

2 个答案:

答案 0 :(得分:1)

像任何其他属性一样定义它,但在setter中,放置所需的行为。

由于MaterialSingleLineTextFieldRO使用私有baseTextBox字段,您需要使用反射来查找它并将其设为只读:

public class MyControl : MaterialSingleLineTextField
{
    bool readOnly;
    public bool ReadOnly
    {
        get { return readOnly; }
        set
        {
            readOnly = value;
            GetTextBoxControl().ReadOnly = value;
        }
    }
    private TextBox GetTextBoxControl()
    {
        var f = typeof(MaterialSingleLineTextField).GetField("baseTextBox",
                    System.Reflection.BindingFlags.NonPublic |
                    System.Reflection.BindingFlags.Instance);
        return (TextBox)f.GetValue(this);
    }
}

答案 1 :(得分:0)

Reza的解决方案解决了我的问题。

我通过在主要源代码(MaterialSkin.dll

中添加代码来获得另一种解决方案

enter image description here