2017-01-22 12 views
0

Моя программа делает метки полужирным, курсивом или подчеркиванием в зависимости от нажатия кнопки. Но когда я пытаюсь получить оба эффекта сразу, первое исчезает.Полужирный, Italic и Underline -vb.net

Private Sub bold_Click(sender As Object, e As EventArgs) Handles bold.Click 

    Dim con4 As Control 
    For Each con4 In Me.Controls 
     Select Case con4.Name 
      Case "Label1" 
       If con4.Font.Bold = False Then 
        con4.Font = New Font(con4.Font, FontStyle.Bold) 
       Else 
        con4.Font = New Font(con4.Font, FontStyle.Regular) 
       End If 
      Case "Label2" 
       If con4.Font.Bold = False Then 
        con4.Font = New Font(con4.Font, FontStyle.Bold) 
       Else 
        con4.Font = New Font(con4.Font, FontStyle.Regular) 
       End If 

...

  End Select 
    Next 
End Sub 

Этот код идет до Label24.

Так что я использую ту же процедуру для 3 разных кнопок, и они получают мне мой результат. Но попытка иметь 2 эффекта вместе переопределяет предыдущий.


Спасибо, ребята.

ответ

3

Вы переопределяете стиль шрифта с помощью следующего теста, потому что вы проверяете и устанавливаете все условия только по одному.

Объединить тесты для каждой метки один раз, а затем выбрать правильный шрифт:

If con4.Font.Bold = False Then 
    If con4.Font.Italic = False Then 
     con4.Font = New Font(con4.Font, FontStyle.Bold Or FontSryle.Italic) 
    Else ' not italic 
     con4.Font = New Font(con4.Font, FontStyle.Bold) 
    End If 
Else ' not bold 
    If con4.Font.Italic = False Then 
     con4.Font = New Font(con4.Font, FontStyle.Italic) 
    Else ' not italic 
     con4.Font = New Font(con4.Font, FontStyle.Regular) 
    End If 
End If 

Как вы можете видеть, это становится громоздким очень быстро; особенно если вы повторяете тот же код для 24 меток. Итак, шаг № 1 должен сделать эту последовательность функцией.

Шаг № 2 - избавиться от всех этих сравнений - добавление Underline добавит еще один уровень if..else..end if для всех отдельных случаев! Вы можете комбинировать FontStyle биты с Or для формирования конечного значения, и только затем установить его:

fontstyle = FontStyle.Regular 
If cond4.Font.Bold = False Then 
    fontstyle = fontStyle.Bold 
End If 
If cond4.Font.Italic = False Then 
    fontstyle = fontstyle Or fontStyle.Italic 
End If 
If cond4.Font.Underline = False Then 
    fontstyle = fontstyle Or fontStyle.Underline 
End If 
target.Font = New Font(con4.Font, fontstyle) 

(Это не может полностью быть правильный синтаксис, но общая идея должна быть ясна.)

+0

Pause , Я отредактирую свой код, чтобы сделать все более ясным. Я не понимаю ваш код. – TGamer

+0

@TGamer: hm .... Какую часть вы не понимаете? – usr2564301

+0

хорошо, я получаю часть Step1, которая должна быть заполнена мной. На шаге 2 я не знаю, что такое 'fontstyle', так как моя программа говорит мне:« Это тип Enum и не может быть преобразован в выражение ». Не могли бы вы отредактировать свой ответ и сказать мне, где я буду писать ваш код. Кажется, что каждое 'If'statement должно находиться под другим событием нажатия кнопки. Уточните пожалуйста и спасибо. – TGamer