チェックボックスを使って書体の変更したいのですが への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 ちゃちゃ  (その他) 投稿日時 2010/2/14 05:29:25
教えていただいたコードを参考になんとか動くようになりました。
ありがとうございました。
投稿者 るしぇ  (社会人) 投稿日時 2010/2/14 03:19:56
> checkedchangedイベントだとどうなりますでしょうか?
イベントの違いによる問題点を洗い出し、
サンプルコードを解析し、影響を調べ、
テスト項目を検討し、テスト結果を評価します。

各ステップで第3者を交えたレビューを行ってください。
投稿者 ちゃちゃ  (その他) 投稿日時 2010/2/14 02:40:56
さっそくのご返答ありがとうございます。

始めの質問の時に書き忘れましたが、今回のコードはcheckedboxのcheckedchangedイベントで作ってます。
アドバイス頂いたコードも早速試してみますが、checkedchangedイベントだとどうなりますでしょうか?
投稿者 るしぇ  (社会人) 投稿日時 2010/2/14 02:33:33

    Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click
        Dim flag As System.Drawing.FontStyle

        flag = FontStyle.Regular

        If chkBold.Checked Then
            flag = flag Or FontStyle.Bold
        End If
        If chkItalic.Checked Then
            flag = flag Or FontStyle.Italic
        End If
        If chkUnderline.Checked Then
            flag = flag Or FontStyle.Underline
        End If

        lbl.Font = New Font(lbl.Font, flag)
    End Sub
投稿者 ちゃちゃ  (その他) 投稿日時 2010/2/14 01:48:05
VB2008を使ってます。
チェックボックスを使ってIF文でbold,italic,underlineの書体を変更するコードを作りたいのですが、何度やってもうまくいきません。

各チェックボックスをチェックしたら、1つだけにチェックしたら1つ、2つチェックしたら2つの書体にといった感じで書体が変わるようにしたいのですが、以下のコードだと組み合わせのうち半分がきちんと動きません。

周りに詳しい方もおらず、こちらに相談させて頂きました。

アドバイスよろしくお願いします。


if chkBold.checked then
lbl.font=new font(lbl.font,fontstyle.Bold)

  if chkItalic.checked then
  lbl.font=new font(lbl.font,fontstyle.Italic)
  
   if chkUnderline.checked then
   lbl.font=new font(lbl.font,fontstyle.Underline)
   
     if chkBold.checked and chkItalic.checked then
     lbl.font=new font(lbl.font,fontstyle.Bold or fontstyle.Italic)

      if chkBold.cheked and chkUnderline.checked then
      lbl.font=new font(lbl.font,fontstyle.Bold or fontstyle.Underline)
        
        if chkBold.checked and chkItalic.checked and chkUnderline.checked then
        lbl.font=new font(lbl.font,fontstyle.Bold or fontstyle.Italic or 
                                                              fontstlye.Underline)
       endif
      endif
    endif
   endif
  endif
else
    lbl.font=new font(lbl.font,fontstyle.regular)

      if chkItalic.checked then
      lbl.font=new font(lbl.font,fontstyle.Italic)

         if chkUnderline.checked then
         lbl.font=new font(lbl.font,fontstyle.Underline)

           if chkItalic.checked and chkUnderline.checked then
           lbl.font=new font(lbl.font,fontstyle.Italic or fontstyle.Underline)
       
           endif
         endif
       endif
     endif

※このコードを組み合わせを変えて3種コーディングしました。
以下に表示の可・不可を書いておきます。

1⇒Bold、2⇒Italic、3⇒Underline

1,2,3単体のチェックはいずれもOK

1+2 OK
1+3 OK
2+3 2つ目でItalicが外れる
2+1 OK
3+1 2つ目でUnderlineが外れる
3+2 2つ目でUnderlineが外れる
1+2+3 OK
1+3+2 OK
2+1+3 OK
2+3+1 2つ目でBoldが外れるが、最後は完成
3+1+2 2つ目でUnderlineが外れ、3つ目でBoldが外れる
3+2+1 2つ目でUnderlineが外れるが最後は完成

うまくいく方法をご存知の方、アドバイスどうぞよろしくお願いします。