Контролы на изображении
От: na1s  
Дата: 17.05.11 03:41
Оценка:
Есть формы у которых на фоне есть изображение панелей с надписями и прочими деталями. Мне нужно, чтоб они масштабировались и контролы не съезжали со своих мест. Я делаю так:

protected void SaveControlsSize()
        {
            FormInitHeight = Height;
            FormInitWidth = Width;
            foreach (Control contrl in Controls)
            {
                CommonControl cc = contrl as CommonControl;
                if (cc != null)
                {
                    widths[cc] = cc.Width;
                    heights[cc] = cc.Height;
                    tops[cc] = cc.Top;
                    lefts[cc] = cc.Left;
                    fontSize[cc] = cc.Font.Size;
                }
            }
        }
        protected void UpdateControlsSize()
        {
            foreach (Control contrl in Controls)
            {
                CommonControl cc = contrl as CommonControl;
                if (cc != null)
                {
                    cc.Top = Convert.ToInt32(tops[cc] *(Height * 1.0 / FormInitHeight));
                    cc.Left = Convert.ToInt32(lefts[cc] * (Width * 1.0 / FormInitWidth));
                    cc.Height = Convert.ToInt32(Math.Round(heights[cc] * (Height * 1.0 / FormInitHeight)));
                    cc.Width = Convert.ToInt32(Math.Round(widths[cc] * (Width * 1.0 / FormInitWidth)));
                    cc.Font = new Font(cc.Font.FontFamily, Convert.ToInt32(fontSize[cc]*(Height * 1.0 / FormInitHeight)));
                }
            }
        }

SaveControlsSize вызываю в конструкторе каждой формы, а UpdateControlsSize в методе Resize. Но все равно контролы съезжают со своих мест, то ли погрешность вычислений, то ли такой тупой. Помогите, пожалуйста, а то совсем не знаю куда копать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.