C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: form2を閉じるともう一度form2が開いてしまうのはナゼ


(過去ログ 93 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■55910 / inTopicNo.1)  form2を閉じるともう一度form2が開いてしまうのはナゼ
  
□投稿者/ lino. (1回)-(2010/12/17(Fri) 20:46:36)

分類:[VB.NET/VB2005 以降] 

お世話になります。
vb2008を使っております。
Form1のRadioButtonをクリックするとForm2が開き、Form1のPictureBoxに表示していたイメージをForm2のPictureBoxに表示するというプログラムを作っています。この時、Form2に用意したキャンセルボタンを押すとForm2を閉じるようにしたのですが、なぜか、閉じたあとすぐにまたもう一度Form2が開くのです。で、その開いた二度目のForm2で、もう一度キャンセルボタンをクリックすると、ちゃんとForm2が閉じられます。
最初そのバグを発見した時、Form1のRadioButtonがForm2を閉じた後もクリック状態のままだったので、ここにRadioButton8.Checked = Falseを追加したのですが、二度Form2が開いてしまう状態は変わらず、しかしRadioButtonはRadioButton8.Checked = Falseになっていました。
私は一度目のクリックでForm2を閉じるようにしたいので、どのようにすれば二度開かないようになるのか、教えていただけないでしょうか。
ちなみにForm2では、表示したイメージに加工を施した後、OKボタンをEnabled=Trueにして(開いた時点ではFalse)、OKをクリックすると、Form2を閉じてForm1にForm2で加工した結果を表示させるのですが、OKの場合は二度Form2が開くことはありません。
以下がそのコードです。RadioButton8とかButton3とかになっている点は飛ばして下さい。


'form1
    Private Sub RadioButton8_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton8.CheckedChanged

        If RadioButton8.Checked = True Then
            
      'form2作成
      Dim settingForm As Form2
            settingForm = New Form2
            settingForm.Owner = Me
            RadioButton8.Checked = False

            'form2に画像を表示
            settingForm.PictureBox1.Image = PictureBox1.Image

            'form2でokが押された時のイベント
            If settingForm.ShowDialog() = Windows.Forms.DialogResult.OK Then
                '切り取った画像をform1に表示
                PictureBox1.Image = settingForm.PictureBox1.Image

                RadioButton8.Checked = False

            'form2でキャンセルが押された時のイベント
            ElseIf settingForm.ShowDialog() = Windows.Forms.DialogResult.Cancel Then
                RadioButton8.Checked = False
            End If

            settingForm.Dispose()
        End If

    End Sub

'form2
    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       
        'ok
        Button1.DialogResult = Windows.Forms.DialogResult.OK
        'キャンセル
        Button3.DialogResult = Windows.Forms.DialogResult.Cancel

    End Sub
   
  'キャンセル
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        Close()

    End Sub

引用返信 編集キー/
■55912 / inTopicNo.2)  Re[1]: form2を閉じるともう一度form2が開いてしまうのはナゼ
□投稿者/ shu (302回)-(2010/12/17(Fri) 21:05:22)
No55910 (lino. さん) に返信

> If settingForm.ShowDialog() = Windows.Forms.DialogResult.OK Then
ここと



> '切り取った画像をform1に表示
> PictureBox1.Image = settingForm.PictureBox1.Image
>
> RadioButton8.Checked = False
>
> 'form2でキャンセルが押された時のイベント
> ElseIf settingForm.ShowDialog() = Windows.Forms.DialogResult.Cancel Then
ここで

> RadioButton8.Checked = False
> End If

2回開いているからです。


If settingForm.ShowDialog() = Windows.Forms.DialogResult.OK Then

else

end if
これでいいように見えますがどうでしょう?


どうしてもOK,Cancelをチェックしたければ
Select case settingForm.ShowDialog()
case Windows.Forms.DialogResult.OK

case Windows.Forms.DialogResult.Cancel

End Select
というやり方もあります。

ifにこだわるなら
Dim ret as Windows.Forms.DialogResult = settingForm.ShowDialog()
としれretに対し条件をok,cancelをチェックするとかもあります。


引用返信 編集キー/
■55924 / inTopicNo.3)  Re[2]: form2を閉じるともう一度form2が開いてしまうのはナゼ
□投稿者/ lino. (4回)-(2010/12/17(Fri) 23:20:01)
No55912 (shu さん) に返信
> ■No55910 (lino. さん) に返信
>
>> If settingForm.ShowDialog() = Windows.Forms.DialogResult.OK Then
> ここと
>
>
>
>> '切り取った画像をform1に表示
>> PictureBox1.Image = settingForm.PictureBox1.Image
>>
>> RadioButton8.Checked = False
>>
>> 'form2でキャンセルが押された時のイベント
>> ElseIf settingForm.ShowDialog() = Windows.Forms.DialogResult.Cancel Then
> ここで
>
>> RadioButton8.Checked = False
>> End If
>
> 2回開いているからです。
>
>
> If settingForm.ShowDialog() = Windows.Forms.DialogResult.OK Then
> 〜
> else
> 〜
> end if
> これでいいように見えますがどうでしょう?
>
>
> どうしてもOK,Cancelをチェックしたければ
> Select case settingForm.ShowDialog()
> case Windows.Forms.DialogResult.OK
> 〜
> case Windows.Forms.DialogResult.Cancel
> 〜
> End Select
> というやり方もあります。
>
> ifにこだわるなら
> Dim ret as Windows.Forms.DialogResult = settingForm.ShowDialog()
> としれretに対し条件をok,cancelをチェックするとかもあります。
>
>


こんな初歩的ミスに丁寧に指導下さり、ありがとうございます!無事解決しました。

'form2でokが押された時のイベント
Dim res As Windows.Forms.DialogResult = settingForm.ShowDialog()
If res = Windows.Forms.DialogResult.OK Then

'切り取った画像をform1に表示
PictureBox1.Image = settingForm.PictureBox1.Image
End If
settingForm.Dispose()
RadioButton8.Checked = False
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -