Как обработать удаление шрифтов в пользовательском контроле? - PullRequest
0 голосов
/ 13 марта 2019

Удаление Шрифтов кажется мне немного странным.Например, если у меня есть элемент управления меткой и я использую используемый шрифт, например, label1.Font.Dispose();, он все равно хорошо прорисовывается.

Если я вместо этого попытаюсь использовать удаленный шрифт сразу же, он потерпит неудачу, например,

var f = new Font("Arial", 14);
f.Dispose();
g.DrawString("Hello", f, Brushes.Black, 20, 20);

за исключением Invalid parameter.

Последнее мне кажется более интуитивным, учитывая, что я пытаюсь использовать удаленный шрифт.
Я не могу понять, почему этикетка по-прежнему хорошо отрисовывается, потому чтов справочном источнике метки я вижу, что шрифт используется сразу же без какой-либо проверки: e.Graphics.DrawString(Text, Font, brush, face, stringFormat);.

Исходный вопрос заключается в том, что у меня есть пользовательский элемент управлениякоторый, как и другие элементы управления, использует шрифты в качестве свойств и реализует IDisposable.Теперь я задаюсь вопросом, должен ли я избавиться от свойств шрифта, потому что я не могу знать, например, было ли установлено свойство шрифта для шрифта, который все еще необходим.

Control, кажется, использует некоторые FontHandleWrapperкласс внутри, что я не совсем понимаю, если честно. Но даже если я извлекаю шрифт из своего пользовательского элемента управления (который у меня есть во внешней библиотеке) извне, он все равно прекрасно рисует, и я немедленно использую шрифты там.

Может кто-нибудьобъясните, почему я могу распоряжаться одним шрифтом, а не другим?Стоит ли оставлять шрифты в покое в методе Dispose моего пользовательского элемента управления или утилизировать их?

...