Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用CSLA禁用C#.NET中的文本框_C#_Winforms_Textbox_Csla - Fatal编程技术网

使用CSLA禁用C#.NET中的文本框

使用CSLA禁用C#.NET中的文本框,c#,winforms,textbox,csla,C#,Winforms,Textbox,Csla,我正在尝试禁用一些文本框,这些文本框用于在我的一个用户控件中显示数据(而不是编辑)。但是,由于某些原因,我无法正确禁用文本框 我已将“readWriteAuthorization上的ApplyAuthorization”设置为true,并且文本框已数据绑定到正确的属性 我还向对象的CanWriteProperty添加了以下行: if (propertyName == OpeningDateProperty.Name) return false; if (propertyName == Chang

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

我已将“readWriteAuthorization上的ApplyAuthorization”设置为true,并且文本框已数据绑定到正确的属性

我还向对象的
CanWriteProperty
添加了以下行:

if (propertyName == OpeningDateProperty.Name) return false;
if (propertyName == ChangeDateProperty.Name) return false;
if (propertyName == CloseDateProperty.Name) return false;
return base.CanWriteProperty(propertyName);
我搞不清楚我做错了什么。我最近在其他用户控件中实现了几乎相同的东西,没有任何问题

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

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

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

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


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

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

或者,如果您从未使用这些文本框进行编辑,那么您可以使用标签来代替


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

如果您试图将它们设置为只读,那么只需将.ReadOnly属性设置为true即可

或者,如果您从未使用这些文本框进行编辑,那么您可以使用标签来代替


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

我想你指的是只读属性

我想你指的是只读属性

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

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

要实现此功能,需要执行以下操作:

  • 确保文本框以正确的方式数据绑定到正确的属性

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

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

    private void rootBindingSource_CurrentItemChanged(object sender, EventArgs e)
    {
        readWriteAuthorization1.ResetControlAuthorization();
    }
    
  • 确保texBox的“ReadWriteAuthorization上的ApplyAuthorization”设置为true


  • 这为我解决了问题。

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

  • 确保文本框以正确的方式数据绑定到正确的属性

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

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

    private void rootBindingSource_CurrentItemChanged(object sender, EventArgs e)
    {
        readWriteAuthorization1.ResetControlAuthorization();
    }
    
  • 确保texBox的“ReadWriteAuthorization上的ApplyAuthorization”设置为true



  • 这为我解决了问题。

    ASP.Net?Windows窗体?WPF?WinForms。。。很抱歉编辑原始邮件您能告诉我们您的对象是什么以及它们的用途吗?例如,代码片段来自哪个类?它的基类是什么?OpeningDateProperty/ChangeDateProperty/CloseDateProperty是否都是文本框?ASP.Net?Windows窗体?WPF?WinForms。。。很抱歉编辑原始邮件您能告诉我们您的对象是什么以及它们的用途吗?例如,代码片段来自哪个类?它的基类是什么?OpeningDateProperty/ChangeDateProperty/CloseDateProperty都是文本框吗?作为一名新开发人员,我基本上是按照别人告诉我的做的,我的同事说所有逻辑都要放在业务对象中。如果我们想这样做的话,这将使将来更改GUI变得“容易”。。。这是用CanWriteProperty完成的,没有其他解决方案是可以接受的。我们需要更多关于你的类的具体信息。我在原始帖子中添加了更多信息。这基本上是CSLA的事情,是的。这让我有点困惑,但决策已经做出,所以我们必须继续努力:作为一名新的开发人员,我基本上在做我被告知的事情,我的同事说所有的逻辑都要放在业务对象中。如果我们想这样做的话,这将使将来更改GUI变得“容易”。。。这是用CanWriteProperty完成的,没有其他解决方案是可以接受的。我们需要更多关于你的类的具体信息。我在原始帖子中添加了更多信息。这基本上是CSLA的事情,是的。这一切让我有点困惑,但决定已经做出了,所以我们必须继续努力:没有双关语,我更有经验的同事正在崩溃。。。我想我不知道。不过我会调查的。然而,这是我刚才在finnished的另一个用户控件上所做的。我在我的原始姿态中对此作了进一步的评论,我的更有经验的同事正在崩溃。。。我想我不知道。不过我会调查的。然而,这是我刚才在另一个用户控件上做的。我在我的原始帖子中对此做了进一步的评论。你是说在属性窗口中将文本框设置为只读吗?因为如果你这样做,我不能。我的代码