2013-04-09 1 views
1

Я могу улучшить свою функцию, чтобы не искать по каждому элементу?Шрифт установлен? function

#Region " Font Is Installed? Function " 

    ' [ Font Is Installed? Function ] 
    ' 
    ' Examples : 
    ' MsgBox(Font_Is_Installed("Lucida Console")) 

    Private Function Font_Is_Installed(ByVal FontName As String) As Boolean 
     Dim AllFonts As New Drawing.Text.InstalledFontCollection 
     For Each Font As FontFamily In AllFonts.Families 
      If Font.Name.ToLower = FontName.ToLower Then Return True 
     Next 
     Return False 
    End Function 

#End Region 

UPDATE:

Хорошо, теперь я видел ".tolist" функцию, и теперь мой код выглядит так:

Private Function Font_Is_Installed(ByVal FontName As String) As Boolean 
    Dim AllFonts As New Drawing.Text.InstalledFontCollection 
    Dim FontFamily As New FontFamily(FontName) 
    If AllFonts.Families.ToList().Contains(FontFamily) Then Return True Else Return False 
End Function 

У меня есть один и тот же вопрос: лучше улучшается вторым способом, или я могу улучшить его лучше?

ответ

4

здесь IS

Public Shared Function IsFontInstalled(ByVal FontName As String) As Boolean 
     Using TestFont As Font = New Font(FontName, 10) 
      Return CBool(String.Compare(FontName, TestFont.Name, StringComparison.InvariantCultureIgnoreCase) = 0) 
     End Using 
    End Function 
+0

Спасибо, но у меня есть два небольших вопроса: во-первых: использование конца верно после возврата значения? Я буду иметь в виду, если «TestFont» действительно заканчивается/закрывается после «возврата» ?, а во-вторых: ваш способ не сравнивает каждый элемент? (извините, если это глупый вопрос) – ElektroStudios

+0

вы только хотите проверить, установлен ли шрифт или нет, никогда не будет двух шрифтов с одинаковым именем, все в порядке с использованием конца, он все равно будет очищать объект из памяти –

3
Dim SomeTextBox As TextBox = New TextBox() 
    Dim SomeFontFamily As FontFamily = Nothing 
    Dim SomeFontCollection As PrivateFontCollection = Nothing 

    Try 
     SomeFontFamily = New FontFamily("SomeFontFamilyName") 
    Catch ex As Exception 
     SomeFontCollection = New PrivateFontCollection() 
     SomeFontCollection.AddFontFile("SomeFontFileName") 
     SomeFontFamily = SomeFontCollection.Families(0) 
    End Try 

    SomeTextBox.Font = New Font(SomeFontFamily, 12) 

Таким образом SomeFontFamily будет создан только из файла, если он не может быть создан из локального шрифта. SomeTextBox отобразит правильный шрифт.

1

Вот пример. Просто попробуйте назначить имя шрифта, и если он генерирует ошибку, поймайте его и верните false.

Private Function isFontInstalled(ByVal FontName As String) As Boolean 
    Try 
     Dim FontFamily As New FontFamily(FontName) 
     FontFamily.Dispose() 
     Return True 
    Catch 
     Return False 
    End Try 
End Function