C#使用String.IsNullOrEmpty的结果设置标签的可见性

时间:2009-06-28 15:47:44

标签: c# winforms

您好我正在尝试根据文本框字符串为空来设置标签的可见性。我有以下代码:

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 个答案:

答案 0 :(得分:2)

取决于代码的运行位置。如果您需要交互性,即当在文本框中键入字符时标签消失,则需要在文本框的Keyup事件上运行它。您可能还需要重新标记标签。

答案 1 :(得分:1)

如果要更新文本更改事件中的Visible属性,则可能会遇到以下问题。当表单首次启动时,文本被设置为空字符串。但是因为这是初始值,它没有改变可以这么说,因此没有引发任何事件。

您可能需要直接在Form构造函数中执行此更新。看看是否能解决问题。

答案 2 :(得分:0)

我怀疑你想使用数据绑定来设置标签的可见性 此讨论可能会对您有所帮助:WPF Data Binding : enable/disable a control based on content of 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>

答案 3 :(得分:0)

我会添加一个修剪,以便在留下空格时更加一致:

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

其余的是在正确的时间触发代码。除了JaredPar所解决的初始状态外,TextChanged应该涵盖除了初始状态之外的所有内容。虽然我会使用Form_Load,而不是构造函数。

在澄清之后编辑:
如果你的Label一个TextBox在frmAdd上,那么问题没有实际意义,在ShowDialog返回后,表单本身不再显示。