如何在禁用的TextBox上启用复制粘贴

时间:2014-02-19 00:34:51

标签: c# winforms

我在win表单上为Title Text框设置了双向数据绑定,如下所示:

txtTitle.DataBindings.Add("Enabled", Person, "Editable", true, DataSourceUpdateMode.OnPropertyChanged);

不幸的是,当文本处于禁用状态时,用户无法复制文本。是否有任何解决方法来启用COPY / PASTE保留双向数据绑定?

2 个答案:

答案 0 :(得分:1)

文本框控件具有ReadOnly属性,您可以将其设置为true。绑定仍应更新。

选项1:使用NotifyPropertyChanged创建一个类

创建一个包含将被绑定的数据的类:

public class Book : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private string name;
    [Bindable(true)]
    public string Name
    {
        get { return name; }
        set
        {
            name = value; 
            if (PropertyChanged != null) 
                PropertyChanged(this, 
                                new PropertyChangedEventArgs("Name"));
        }
    }

    public Book(string name)
    {
        Name = name;
    }
}

创建此类的实例并绑定它:

public Book TheBook { get; set; }

public Form1()
{
    InitializeComponent();

    TheBook = new Book("");
    textBox1.DataBindings.Add(new Binding("Text", 
                                          TheBook,
                                          "Name",
                                          true,
                                          DataSourceUpdateMode.OnPropertyChanged, 
                                          ""));
}

更改属性,它将更新:

private void button1_Click(object sender, EventArgs e)
{
    TheBook.Name = "Different";
}

选项2:创建自定义控件以屏蔽已启用为ReadOnly

创建以下自定义控件并将其用于绑定到Enabled:

public partial class DBTextBox : TextBox
{
    private bool enabled;
    public new bool Enabled
    {
        get { return enabled; }
        set
        {
            enabled = value;
            base.Enabled = true;
            ReadOnly = !enabled;
        }
    }

    public DBTextBox()
    {
        InitializeComponent();
    }
}

每当DBTextBox设置为Enabled = false时,它将使其成为ReadOnly。

答案 1 :(得分:0)

覆盖Enable属性,设置本地标志,通过本地标志过滤按下键时忽略用户输入。并设置颜色以假装它已被禁用。