Отключение TextBox в C # .NET с использованием CSLA - PullRequest
1 голос
/ 18 февраля 2009

Я пытаюсь отключить несколько текстовых полей, предназначенных для отображения данных (не редактировать) в одном из моих пользовательских элементов управления. Однако по какой-то причине я не могу заставить textBoxes правильно отключиться.

Я установил "ApplyAuthorization для 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);

Я не могу понять, что я делаю здесь неправильно. Недавно я реализовал почти то же самое в других пользовательских элементах управления без каких-либо проблем ...

Я использую Windows Forms в C # .NET (Visual Studio 2008)

РЕДАКТИРОВАТЬ: Фрагменты кода и свойства взяты из моего объекта клиента. Дата представляет собой открытие, последнее изменение и закрытие счета клиента. Они никогда не должны редактироваться вообще, и фактически в старом решении они представлены textLabels, однако теперь мы хотим использовать текстовое поле и установить для свойства CanWriteProperty значение false.

Я понимаю, что информация может быть немного скудной, но я ищу то, что я мог забыть в этом процессе.

РЕДАКТИРОВАТЬ: Мы также используем CSLA , и я думаю (я новичок во всем этом), это как-то связано с тем, почему мы хочу сделать это так.

РЕДАКТИРОВАТЬ (Раствор): Как вы можете видеть в моем ответе ниже, проблема заключалась в том, что я не настроил событие CurrentItemChanged, как я должен был.

Ответы [ 4 ]

14 голосов
/ 18 февраля 2009

Если вы пытаетесь сделать их доступными только для чтения, просто установите для свойства .ReadOnly значение true.

В качестве альтернативы, если вы никогда не используете эти текстовые поля для редактирования, то, возможно, просто используйте вместо них метку?

РЕДАКТИРОВАТЬ: Ах, кажется, это больше вопрос о структуре CSLA, чем вопрос о чистых окнах. Я никогда не слышал о CSLA до этого вопроса, но это выглядит интересно.

3 голосов
/ 18 февраля 2009

Если вы привязываете данные к свойствам элемента управления, просто привяжите свойство «ReadOnly» текстового поля к свойству «CanWrite» вашего бизнес-объекта.

1 голос
/ 19 февраля 2009

Чтобы сделать эту работу вам нужно сделать следующее:

  1. Убедитесь, что TextBox правильно привязан к нужному свойству

  2. Установите необходимые проверки для каждого текстового поля в переопределении CanWriteProperty в корневом объекте

    if (propertyName == OpeningDateProperty.Name) return false;
    
  3. Убедитесь, что событие CurrentItemChanged rootBindingsource установлено правильно

    private void rootBindingSource_CurrentItemChanged(object sender, EventArgs e)
    {
        readWriteAuthorization1.ResetControlAuthorization();
    }
    
  4. Убедитесь, что для поля «ApplyAuthorization on ReadWriteAuthorization» texBox установлено значение true

Это решило проблему для меня.

1 голос
/ 18 февраля 2009

Я думаю, вы имеете в виду свойство ReadOnly

...