Jeśli w toolbarze mamy ustawiony rozmiar wyświetlania obrazków (
ImageScalingSize
) inny od natywnego rozmiaru obrazków, to zmuszamy system by go za nas przeskalował. Problem w tym, że radzi on sobie z tym wyjątkowo nieudolnie (obrazki wychodzą kiepskiej jakości). Nie udało mi się w żaden sposób wpłynąć na ten proces, tak więc nie pozostało nic innego zrobienie ręcznego skalowania podczas uruchamiania aplikacji. Poniższy kod trzeba będzie rozbudować jeśli w naszej aplikacji podczas jej działania dopuszczamy zmianę wielkości ikon toolbara. Samo przeskalowanie jest stosunkowe prosta:
for (int i = 0; i < toolStrip.Items.Count; i++)
{
if (toolStrip.Items[i].Image != null)
{
toolStrip.Items[i].Image = toolStrip.Items[i].Image.GetThumbnailImage(
toolStrip.ImageScalingSize.Width, toolStrip.ImageScalingSize.Height, null, IntPtr.Zero);
}
}
Jeśli to rzeczywiście błąd, a nie, że tylko ja nie wiem, gdzie ustawić jaką właściwość, to jest to dość fatalny błąd. Inna sprawa czemu kolekcja
Items
nie bazuje na typach generycznych, żeby
foreach
nie zwracało obiektów typu
Object
. Ten problem jest zresztą bardziej powszechny. Np.
Enum.GetValues
zwraca obiekt typu
Array
. Może to kiedyś uporządkują, choć będzie się to wiązało z utratą kompatybilności wstecz.