Я пытаюсь создать элемент управления Label , который автоматически отображает его текст жирным шрифтом.
Моя среда - это приложение C # Windows Forms, использующее .NET 3.5, Visual Studio.2010 SP1, Windows 7 Professional, SP1, 32-разрядный процессор.
Моя текущая реализация показана ниже.
Единственное требование, предъявляемое к этому полужирному элементу управления Label, заключается в том, что он должен вести себя точно так жестандартный элемент управления System.Windows.Forms.Label (как программно, так и в среде дизайнера WinForm), за исключением того факта, что для рисования текста используется жирный шрифт.
Вот некоторые проблемы, которые у меня возникают стекущая реализация:
Я намерен использовать этот элемент управления с полужирной меткой во многих местах большого приложения, что приведет к сотням экземпляров этого элемента управления во время выполнения.Я без необходимости создаю новые объекты Font?Должны ли эти объекты Font быть уничтожены?Если да, то когда?
Я хочу убедиться, что когда я локализую свое приложение (установите для свойства Localizable значение true для родительского контейнера), эта жирная метка будет хорошо работать с ресурсом WinFormМеханизм сериализации.Другими словами, если я перетащу этот полужирный ярлык в форму Windows, затем установите для Localizable значение true для формы, а затем нажмите кнопку «Сохранить», Visual Studio сериализует ресурсы моей формы в MyForm.Designer.cs.Это будет включать в себя экземпляр моего смелого ярлыка управления.Будет ли моя реализация установки шрифта для моей жирной метки испортить этот механизм сериализации ресурсов?
Есть ли лучшая / более чистая реализация?Другие вопросы для рассмотрения?
[Код следует]
namespace WindowsFormsApplication1
{
using System.ComponentModel;
using System.Drawing;
/// <summary>
/// Represents a standard Windows label with a bolded font.
/// </summary>
public class BoldLabel : System.Windows.Forms.Label
{
[Browsable( false )]
[DesignerSerializationVisibility( DesignerSerializationVisibility.Hidden )]
public override Font Font
{
get
{
Font currentFont = base.Font;
if ( currentFont.Bold )
{
// Nothing to do, since the current font is already bold.
//
return currentFont;
}
if ( currentFont.FontFamily.IsStyleAvailable( FontStyle.Bold ) )
{
// The current font supports the bold style, so create
// a bold version of the current font and return it.
//
return new Font( currentFont, FontStyle.Bold );
}
else
{
// The current font does NOT support the bold style, so
// just return the current font.
//
return currentFont;
}
}
set
{
// The WinForm designer should never set this font, but we
// implement this method for completeness.
//
base.Font = value;
}
}
}
}