1

我试图在我的一个 UserControls 中禁用一些用于显示数据(而不是编辑)的文本框。但是,由于某种原因,我无法正确禁用文本框。

我已将“在 readWriteAuthorization 上应用授权”设置为 true,并且文本框已数据绑定到正确的属性。

我还在CanWriteProperty我的对象中添加了以下几行:

if (propertyName == OpeningDateProperty.Name) return false;
if (propertyName == ChangeDateProperty.Name) return false;
if (propertyName == CloseDateProperty.Name) return false;
return base.CanWriteProperty(propertyName);

我无法弄清楚我在这里做错了什么。我最近在其他 UserControls 中实现了几乎相同的东西,没有任何问题......

我在 C# .NET (Visual Studio 2008) 中使用 Windows 窗体

编辑:代码片段和属性取自我的客户对象。日期代表客户账户的开立、最后更改和关闭。它们根本不应该被编辑,实际上在旧的解决方案中它们由 textLabels 表示,但是我们现在想要使用文本框并使属性的 CanWriteProperty 为 false。

我意识到这些信息可能有点稀缺,但我正在寻找我在这个过程中可能忘记的东西。

编辑:我们也在使用CSLA,我想(我对这件事很陌生)这与我们为什么要这样做有关。

编辑(解决方案):CurrentItemChanged正如您在下面的回答中看到的那样,问题是我没有像我应该的那样设置事件。

4

4 回答 4

14

如果您想让它们只读,那么只需将 .ReadOnly 属性设置为 true。

或者,如果您从未使用这些文本框进行编辑,那么也许只使用标签代替?

编辑: 啊,这似乎更像是一个 CSLA 框架问题,而不是纯 Windows 窗体问题。在这个问题之前,我什至从未听说过 CSLA,但它看起来很有趣。

于 2009-02-18T16:40:34.347 回答
3

如果要对控件的属性进行数据绑定,只需将文本框的“ReadOnly”属性绑定到业务对象的“CanWrite”属性即可。

于 2009-02-18T17:01:46.010 回答
1

我认为您的意思是 ReadOnly 属性

于 2009-02-18T16:45:10.293 回答
1

要完成这项工作,您需要执行以下操作:

  1. 确保 TextBox 以正确的方式数据绑定到正确的属性

  2. 在根对象的 CanWriteProperty 覆盖中为每个文本框设置所需的检查

    if (propertyName == OpeningDateProperty.Name) return false;
    
  3. 确保 rootBindingsource 的 CurrentItemChanged 事件设置正确

    private void rootBindingSource_CurrentItemChanged(object sender, EventArgs e)
    {
        readWriteAuthorization1.ResetControlAuthorization();
    }
    
  4. 确保 texBox 的“在 ReadWriteAuthorization 上应用授权”设置为 true

这为我解决了这个问题。

于 2009-02-19T14:26:11.760 回答