您好我正在尝试根据文本框字符串为空来设置标签的可见性。我有以下代码:
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)中。
答案 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返回后,表单本身不再显示。