0

我用 VB.NET 和 Visual Studio 2005 创建了一个数据源。我将数据源拖到我的对话框上,VS 用我的链接对象 aSystem.Windows.Forms.BindingSource和 a的成员创建了文本框System.Windows.Forms.BindingNavigator

我填充了 List(称为 myList),将 myList 设置为 BindingSource 中的 DataSource,除了我希望它是只读的这一事实之外,一切都很顺利。如果用户在其中一个文本框中更改了某些内容,它会保存更改。

我尝试创建一个只读集合来绑定到 BindingSource,但这并没有解决问题:

Dim detailsDlg As New dlgMyDetails
Dim readOnlyList As New ReadOnlyCollection(Of MyObjects)(myList)

detailsDlg.MyBindingSource.DataSource = readOnlyList
detailsDlg.ShowDialog()

我想我可以禁用所有的文本框,但这似乎有点笨拙,而且我可能想更改字体颜色以便更容易阅读。

理想情况下,我可能不在乎用户是否能够将焦点设置到文本框,甚至编辑内容,但我只是不希望任何更改持续存在。也就是说,如果有人编辑了某些东西,使用导航器转到下一条记录,然后返回,我希望它在用户使用它之前保持原样。

有什么建议/指导吗?

提前致谢!

4

2 回答 2

2

从模型-视图-控制的角度来看,您想要的约束不在模型或控件上,而是在视图上。视图应限制屏幕上可编辑的内容。

如果它真的是只读的,为什么不使用只读的用户界面元素,即标签?这样做的原因是为了减少用户的困惑。如果它是一个文本框,则可以合理地期望数据在某些时候变得可编辑。如果不是这种情况,那么显示禁用的文本框可能不是显示正确的 UI 元素,而是如前所述的标签。

于 2010-02-20T23:30:03.890 回答
1

您可以将类 (MyObjects) 中的属性更改为 ReadOnly 或将属性 System.ComponentModel.ReadOnly(true) 添加到您的属性,而不是创建 ReadOnlyCollection,例如:

class Person
{
    public Person(int id, string name, string address)
    {
        _id = id;
        Name = name;
        Address = address;
    }

    private int _id = 0;
    public int ID { get { return _id; } }

    [System.ComponentModel.ReadOnly(true)]
    public string Name { get; set; }

    public string Address { get; set; }
}

ID 和名称将是只读的,如果示例是 C# 中的,对不起。希望这可以帮助。

干杯。

于 2010-02-16T05:07:27.023 回答