DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Messageboxの戻り値について

環境/言語:[WindowsVista、VB.net]
分類:[.NET]

開発環境 VS2005、WindowsVista、言語はVB.net

こんにちは、Messageboxの戻り値について質問があります。
メッセージボックスにYESとNOとCancelのボタンを指定して表示し、押されたボタンによって、Form1のテキストプロパティを変更するものですが、この場合にキャンセルを押した時、Form1のテキストプロパティはNoになってしまいます。
以下がそのコードなのですが、

If MessageBox.Show("test", "分岐テスト", _
MessageBoxButtons.YesNoCancel) = Windows.Forms.DialogResult.Yes Then
Me.Text = "Yes"
ElseIf Windows.Forms.DialogResult.No Then
Me.Text = "No"
ElseIf Windows.Forms.DialogResult.Cancel Then
Me.Text = "Cancel"
End If

このコードに何か間違いはあるのでしょうか?
ちなみに、他のYesとNoのボタンを押したときはその通り、YesとNoがForm1のテキストプロパティになります。
■No20560に返信(村の屋さんの記事)
ElseIf の部分はメッセージボックスの戻り値とは関係なく、

Windows.Forms.DialogResult.No を Boolean に暗黙の型変換したら
True と評価できるか?
Windows.Forms.DialogResult.Cancel を Boolean に暗黙の型変換したら
True と評価できるか?

の条件で判断してるね。
2007/09/24(Mon) 13:14:32 編集(投稿者)
2007/09/24(Mon) 13:14:22 編集(投稿者)

■No20561に返信(るしぇさんの記事)
> ■No20560に返信(村の屋さんの記事)
> ElseIf の部分はメッセージボックスの戻り値とは関係なく、
>
> Windows.Forms.DialogResult.No を Boolean に暗黙の型変換したら
> True と評価できるか?
> Windows.Forms.DialogResult.Cancel を Boolean に暗黙の型変換したら
> True と評価できるか?
>
> の条件で判断してるね。

どうやら私のmessageboxの戻り値の分岐方法による勘違いのような物だったようです…。
以下のコードに修正した結果、私の思い通りに動作しました。

Dim result As String
result = MessageBox.Show("test", "分岐テスト", _
MessageBoxButtons.YesNoCancel)

If result = "yes" Then
Me.Text = "yes"
ElseIf result = "No" Then
Me.Text = "no"
Else
Me.Text = "cancel"
End If

あまりスマートな方法では無さそうですが、これで解決致しました。
ありがとうございました。
解決済み!
2007/09/24(Mon) 14:16:26 編集(投稿者)

■No20562に返信(村の屋さんの記事)
DialogResult を使えるけど?
 # Option Strict On にしておけば、エラーが分かり易くなります。
        Dim result As Windows.Forms.DialogResult
        result = MessageBox.Show("test", "分岐テスト", _
        MessageBoxButtons.YesNoCancel)

        If result = Windows.Forms.DialogResult.Yes Then
            Me.Text = "yes"
        ElseIf result = Windows.Forms.DialogResult.No Then
            Me.Text = "no"
        ElseIf result = Windows.Forms.DialogResult.Cancel Then
            Me.Text = "cancel"
        End If
解決済み!
いつも口をすっぱくして言っていることなのですが。
文字列で比較するとコンパイルで解決できないので勿体無さ過ぎます。

知らないメソッドは調べるようにするクセをつけた方が良いでしょう。
というより、戻り値の型を意識せずメソッドを使うのは危険ですよね。
私には怖くてできない行為です。
解決済み!
2007/09/24(Mon) 18:10:42 編集(投稿者)

確かに恐ろしい行為でした…。
全て変数を正しい型に修正しました。

わからない型があるときは調べる癖をつけないとダメですね…。
たぶん、原因不明のエラーなどはこういうところから出てくる物だと思いますし…。
これからは気をつけるようにします。

アドバイスありがとうございます。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板