1

非常に単純な質問、および/または演算子を同じステートメントに組み合わせる方法。

c.GetTypeはgetType(TextBox)ANDfooまたはbarまたはbazです

これは機能していません

For Each c As Control In Me.Controls
    If (c.GetType Is GetType(TextBox)) And ((c.Name <> "txtID") Or (c.Name <> "txtAltEmail")) Then
        'do something
    End If
Next

これは機能します:

For Each c As Control In Me.Controls
    If (c.GetType Is GetType(TextBox)) And (c.Name <> "txtID") Then
        'do something
    End If
Next

ありがとう、私は.net初心者です!

4

2 に答える 2

2

ちなみに、了解度を向上させるLINQを使用できます。

Dim allTextBoxes = From txt In Me.Controls.OfType(Of TextBox)()
                  Where txt.Name <> "txtID" AndAlso txt.Name <> "txtAltEmail"
For Each txt In allTextBoxes
    ' do something with the TextBox '
Next
  • OfType指定されたタイプのコントロールのみを返します。この場合はTextBoxesです。
  • WhereプロパティでコントロールをフィルタリングしNameます(注:AndAndAlsodifference
  • 結果をFor Each繰り返しますIEnumerable(Of TextBox)
于 2012-07-11T21:50:10.517 に答える
1

最初のステートメントは、数学的な観点からは意味がありません。表現

X <> A or X <> B

常に戻りますtrue(それを考えるとA <> B、それ以降、あなたの場合は満足しています"txtID" <> "txtAltEmail")。

(の場合X = A、2番目の節が真になります。の場合X = B、最初の節が真になります。Xそれ以外の場合は、両方の節が真になります。)

あなたがおそらく書くつもりだったのは

If (TypeOf c Is TextBox) AndAlso (c.Name <> "txtID") AndAlso (c.Name <> "txtAltEmail") Then

また

If (TypeOf c Is TextBox) AndAlso Not ((c.Name = "txtID") OrElse (c.Name = "txtAltEmail")) Then

これは論理的に同等です。

(私はまた、タイプチェックをよりエレガントなバリアントに変更し、And / Orをより効率的な対応物に置き換えるために自由を取りました。)

于 2012-07-11T22:07:06.437 に答える