C # Установите видимость метки, используя результат String.IsNullOrEmpty - PullRequest
1 голос
/ 28 июня 2009

Привет. Я пытаюсь установить видимость метки на основе пустой строки текстового поля. У меня есть следующий код:

MyLabel.Visible = String.IsNullOrEmpty(MyTextBox.Text);

Почему MyLabel не появляется, когда текстовое поле остается пустым?

Обновление

Я попытался поместить этот код в событие Text_Changed текстового поля, и он все еще не работает.

Это проблема обновления, она работает с событием Text_Changed. Однако проблема в том, что он не работает, когда запускается при обработке формы.

Вот код, запущенный из моего класса контроллера, чтобы дать всем лучшее понимание того, что происходит:

using (var frm = new frmAdd(PersonType.Carer))
{
    var res = frm.ShowDialog();
    if (res == System.Windows.Forms.DialogResult.OK)
    {
         if (frm.ValidateInformation())  // the above code is called in here
         {
               // process the information here...
         }
    }
}

Также я забыл упомянуть, что эта форма находится в проекте библиотеки классов (dll).

Ответы [ 4 ]

2 голосов
/ 28 июня 2009

Зависит от того, где выполняется код. Если вам нужна интерактивность, то есть метка исчезает, когда символ вводится в текстовое поле, вам нужно запустить его для события Keyup текстового поля. Вам также может понадобиться перекрасить этикетку.

1 голос
/ 28 июня 2009

Если вы обновляете свойство Visible в событии измененного текста, вы, вероятно, сталкиваетесь со следующей проблемой. Когда форма запускается впервые, текст задается пустой строкой. Но поскольку это начальное значение, оно не изменило, так сказать, и, следовательно, событие не вызывается.

Возможно, вам потребуется выполнить это обновление непосредственно в конструкторе форм. Посмотрите, решит ли это проблему.

0 голосов
/ 28 июня 2009

Я бы добавил Trim, чтобы быть более последовательным для пользователя в случае оставшихся пробелов:

MyLabel.Visible = String.IsNullOrEmpty(MyTextBox.Text.Trim());

В остальном, это вопрос запуска кода в нужное время. TextChanged должен охватывать все, кроме исходного состояния, как указано в JaredPar. Хотя я бы использовал Form_Load, а не конструктор.

Редактировать после уточнения:
Если ваш Label и TextBox находятся на frmAdd, то вопрос спорный, сама форма больше не отображается после возврата ShowDialog.

0 голосов
/ 28 июня 2009

Я подозреваю, что вы хотите использовать привязку данных для установки видимости метки.
Это обсуждение может вам помочь: Привязка данных WPF: включить / отключить элемент управления на основе содержимого var?

Обновление, некоторый код:

public string MyText
{
  get { return _myText; }
  set { _myText = value; OnPropertyChanged("MyText"); }
}

public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
  if (PropertyChanged != null)
  {
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
  }
}

private void theTextBox_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e)
{
  _myText = theTextBox.Text;
  OnPropertyChanged("MyText");
}

}

[ValueConversion(typeof(string), typeof(System.Windows.Visibility))]
public class StringToVisibilityConverter : System.Windows.Data.IValueConverter
{
  public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {
    System.Windows.Visibility vis;
    string stringVal = (string)value;
    vis = (stringVal.Length < 1) ? Visibility.Visible : Visibility.Hidden;
    return vis;
  }

  public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {
    return null;
  }  
}
In the XAML:
<TextBlock Background="AliceBlue" >
  <TextBlock.Visibility>
    <Binding ElementName="window1" Path="MyText" Converter="{StaticResource stringToVisibilityConverter}"/>
  </TextBlock.Visibility>
</TextBlock>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...