फ़िल्टर करता है क्योंकि इनबिल्ट फ़ॉन्ट डायलॉग एक गैर ट्रू टाइप फ़ॉन्ट का चयन करने पर 'ट्रू टाइप फ़ॉन्ट नहीं' अपवाद देता है, मैं कस्टम बनाने की कोशिश कर रहा हूं फ़ॉन्ट-परिवार का उपयोग करके फ़ॉन्ट डायलॉग जो गैर-सही प्रकार के फोंट को फ़िल्टर करता है।सी # के लिए कस्टम फ़ॉन्ट संवाद/चयनकर्ता को डिज़ाइन करना जो गैर वास्तविक प्रकार फ़ॉन्ट्स
नियंत्रण पूरी तरह से काम कर रहा है लेकिन मुझे इस संवाद के लिए आकार और शैली चयनकर्ताओं की आवश्यकता है। मैं वर्तमान कोड पोस्ट कर रहा हूँ। कृपया मुझे आकार और स्टाइल चयनकर्ता जोड़ने में मेरी सहायता करें। यह आपके लिए भी उपयोगी हो सकता है।
public class FontListBox : ListBox
{
private List<Font> _fonts = new List<Font>();
private Brush _foreBrush;
public FontListBox()
{
DrawMode = DrawMode.OwnerDrawFixed;
ItemHeight = 20;
foreach (FontFamily ff in FontFamily.Families)
{
// determine the first available style, as all fonts don't support all styles
FontStyle? availableStyle = null;
foreach (FontStyle style in Enum.GetValues(typeof(FontStyle)))
{
if (ff.IsStyleAvailable(style))
{
availableStyle = style;
break;
}
}
if (availableStyle.HasValue)
{
Font font = null;
try
{
// do your own Font initialization here
// discard the one you don't like :-)
font = new Font(ff, 12, availableStyle.Value);
}
catch
{
}
if (font != null)
{
_fonts.Add(font);
Items.Add(font);
}
}
}
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (_fonts != null)
{
foreach (Font font in _fonts)
{
font.Dispose();
}
_fonts = null;
}
if (_foreBrush != null)
{
_foreBrush.Dispose();
_foreBrush = null;
}
}
public override Color ForeColor
{
get
{
return base.ForeColor;
}
set
{
base.ForeColor = value;
if (_foreBrush != null)
{
_foreBrush.Dispose();
}
_foreBrush = null;
}
}
private Brush ForeBrush
{
get
{
if (_foreBrush == null)
{
_foreBrush = new SolidBrush(ForeColor);
}
return _foreBrush;
}
}
protected override void OnDrawItem(DrawItemEventArgs e)
{
base.OnDrawItem(e);
if (e.Index < 0)
return;
e.DrawBackground();
e.DrawFocusRectangle();
Rectangle bounds = e.Bounds;
Font font = (Font)Items[e.Index];
e.Graphics.DrawString(font.Name, font, ForeBrush, bounds.Left, bounds.Top);
}
}
public partial class MyFontDialog : Form
{
private FontListBox _fontListBox;
public MyFontDialog()
{
InitializeComponent();
_fontListBox = new FontListBox();
_fontListBox.Dock = DockStyle.Fill;
Controls.Add(_fontListBox);
}
}
मैं https://sourceforge.net/p/newfontpicker/
फ़ॉन्टडिअलॉग क्लास पहले से ही गैर-ट्रू टाइप फ़ॉन्ट्स फ़िल्टर करता है। यहां वास्तविक समाधान उस फ़ॉन्ट को अनइंस्टॉल करना है जिसमें खराब मेटाडेटा है। –
नं। कृपया देखें http://c-madeeasy.blogspot.com/2011/11/unsolved-this-is-not-true-type-font.html – techno
यह इन opentype फ़ॉन्ट्स को फ़िल्टर करने का प्रयास करता है लेकिन कुछ फ़ॉन्ट अभी भी मौजूद हैं । Http://connect.microsoft.com/VisualStudio/feedback/details/708872/this-is-not-a-true-type-font-only-true-type-fonts-are-accepted-exception देखें। – techno