1

ボタンの幅は123です。次のように幅を変更しないのはなぜですか

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    With Me.Button3
        IIf(.Width = 123, .Width = 233, .Width = 150)
    End With
End Sub

IIFは値を返すだけですか?つまり、ボタンのwidthプロパティを設定する場合、If構造を使用する必要がありますか?

MSDNでIifについてほとんど言及されていません

4

3 に答える 3

2

コードは をテストし、 true の場合.Width = 123はブール式を返し、false の場合は結果を破棄します。これは意図したものではありません。次の 3 つの選択肢があります。.Width = 233.Width = 150

' IIf function - not recommended since it is not typesafe and evaluates all arguments.
.Width = IIf(.Width = 123, 233, 150)

' If operator - typesafe and only evaluates arguments as necessary.
.Width = If(.Width = 123, 233, 150)

' If statement - not an expression.
If .Width = 123 Then .Width = 233 Else .Width = 150
于 2012-09-27T06:54:09.393 に答える
2

VB.NET の If() ステートメントを使用します。これは「条件演算子」と呼ばれ、多くの言語に存在します。IIf は VB 固有の関数であり、動作が異なります。詳細はこちら: IIf() と If のパフォーマンスの違い

どちらの場合も、IIf と If は値を返すだけです (IIF のものは型指定されていません。キャストする必要があるオブジェクトです)。とにかくあなたが望むことをするようです:

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    Button3.Width = If(Button3.Width = 123, 233, 150)
End Sub
于 2012-09-27T06:55:05.797 に答える
1

IIF は値を返すだけですか?

はい。

ボタンの width プロパティを設定したい場合、If 構造を使用する必要がありますか?

いいえ、戻り値をWidthプロパティに割り当てることができるためです。

With Me.Button3 
    .Width = IIf(.Width = 123, 233, 150) 
End With 

VB.NET の現在のバージョンでは、Iif の代わりにIf 演算子を使用する必要があることに注意してください。これには、さまざまな利点 (型の安全性、短絡など) があるためです。たとえば、を使用If(...)すると、追加のキャストがなくてもコードをコンパイルできますOption Strict On(キャストする必要があります)。

With Me.Button3 
    .Width = If(.Width = 123, 233, 150) 
End With 
于 2012-09-27T07:04:31.283 に答える