【问题标题】:How to validate that at least one textbox was filled in (VB.Net)如何验证是否填写了至少一个文本框(V​​B.Net)
【发布时间】:2018-09-16 04:17:49
【问题描述】:

我有 4 个文本框,我正在尝试验证至少有一个文本框在点击搜索以检查其搜索条件之前已被填充。

我的问题:我的代码正在运行,但是当我想继续填写一个已填充的字段时,它仍然显示消息框。

If txtMember.Text = "" Then
            MessageBox.Show("Please enter a value!")
        ElseIf txtReference.Text = "" Then
            MessageBox.Show("Please enter a value!")
        ElseIf txtName.Text = "" Then
            MessageBox.Show("Please enter a value!")
        ElseIf txtCode.TextLength = "" Then
            MessageBox.Show("Please enter a value!")
        Else
            SearchClick()
        End If

我该如何解决这个问题?非常感谢您的帮助。

【问题讨论】:

  • 在我看来txtCode.TextLength 将是一个数字,例如0,而不是字符串,例如“”。
  • 那是一个错误。 TextLength 不应该在那里 :)

标签: vb.net winforms visual-studio-2003


【解决方案1】:

AllAny 扩展方法在这种情况下很有用,例如

If {TextBox1, TextBox2, TextBox3}.Any(Function(tb) tb.TextLength > 0) Then
    'At least one TextBox has some text in it.

【讨论】:

  • 我认为这比仅使用 if/elseif 会产生更多开销且不易阅读。首先创建一个数组......然后创建可枚举......,然后搜索元素......我会坚持 if-elseif
  • “创建可枚举”是什么意思?如果您在谈论 Enumerable 类,则不会创建实例,因为扩展方法是静态的。如果您的意思是枚举的对象,那么数组就是那个对象,即TextBox 数组实现IEnumerable(Of TextBox)。我不一定会说这在这种特定情况下是优越的,但很高兴了解这些选项。就可读性而言,我认为这取决于您对 LINQ 的熟悉程度。我倾向于发现这种东西更具可读性。有开销,但微不足道。
  • "Any" 是 IEnumerable 的扩展方法。是的,它是静态的,但您仍然必须创建所有内部结构才能使其工作。从 3.5 开始,Array 类实现了 IEnumerable。那是很多内部设置只是为了检查一些东西。如果这是一个很大的项目列表,那么我会同意,但这只是几个文本框,所以我认为它过分了。
【解决方案2】:

下面的内容是您想要的吗? 因此,如果每个文本框都是空白的,您希望出现一个消息框,否则如果其中一个文本框已填写,则执行 SearchClick How to use If Else。学习单步调试代码可能会帮助您了解代码中发生了什么。

If txtMember.Text = "" AndAlso txtReference.Text = "" AndAlso txtName.Text = "" AndAlso  txtCode.TextLength = "" Then
    MessageBox.Show("Please enter a value!")
Else
    SearchClick()
End If

【讨论】:

  • @AndrewMorton 我知道其中的区别,我有点匆忙地写了这篇文章,但肯定知道对 OP 很有用。更新了答案。
  • 我看到您已更改为“AndAlso”。 “并且”也为我做了伎俩。这两者有区别,还是一样?
  • @Ridge 如果您点击链接 Andrew Morton,它将更详细地解释它。但简而言之,AndAlso 是一种短路方法。 And 将检查所有语句,而 AndAlso 一旦知道其中一个条件为假,就会停止一次。因此,如果txtRefence 不为空,它将停止检查其余部分,因为它知道条件为假,因此在进行大量检查时可以节省时间。
  • 使用 string.empty 而不是 ""。这会导致编译器创建一个 empy 字符串来进行比较,而 string.empty 是一个常量,将节省一些时钟周期。
猜你喜欢
  • 1970-01-01
  • 2010-12-10
  • 2014-06-08
  • 1970-01-01
  • 1970-01-01
  • 2012-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多