Как изменить размер элемента управления ярлыком - PullRequest
0 голосов
/ 28 декабря 2018

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

Для этого я использую класс LabelPrint и установил для свойства AutoSize значение false.Я уже сделал код, который будет регулировать размер шрифта в соответствии с размером моей этикетки.Но я не могу изменить размер этикетки ... Спасибо за помощь, вот код.

class LabelPrint : Label
{

    public LabelPrint()
    {
        this.ResizeRedraw = true;
        this.AutoSize = false;
        this.TextAlign = ContentAlignment.MiddleCenter;
        this.Font = new Font(this.Font.FontFamily, 12);
        this.SizeChanged += new EventHandler(this.SizeLabelFont);
    }

    protected override void WndProc(ref Message m)
    {
        base.WndProc(ref m);
        if (m.Msg == 0x84)
        {  // Trap WM_NCHITTEST
            var pos = this.PointToClient(new Point(m.LParam.ToInt32()));
            if (pos.X >= this.Size.Width - grab && pos.Y >= this.Size.Height - grab)
                m.Result = new IntPtr(17);  // HT_BOTTOMRIGHT
        }
    }
    private const int grab = 16;


    public void SizeLabelFont(object sender, EventArgs e)
    {
        // Only bother if there's text.
        string txt = this.Text;
        if (txt.Length > 0)
        {
            int best_size = 100;

            // See how much room we have, allowing a bit
            // for the Label's internal margin.
            int wid = this.DisplayRectangle.Width - 3;
            int hgt = this.DisplayRectangle.Height - 3;

            // Make a Graphics object to measure the text.
            using (Graphics gr = this.CreateGraphics())
            {
                for (int i = 1; i <= 100; i++)
                {
                    using (Font test_font =
                        new Font(this.Font.FontFamily, i))
                    {
                        // See how much space the text would
                        // need, specifying a maximum width.
                        SizeF text_size =
                            gr.MeasureString(txt, test_font);
                        if ((text_size.Width > wid) ||
                            (text_size.Height > hgt))
                        {
                            best_size = i - 1;
                            break;
                        }
                    }
                }
            }

            // Use that font size.
            this.Font = new Font(this.Font.FontFamily, best_size);
        }
    }
}

Я пытался добавить это в классе LabelPrint:

        protected override void OnLayout(LayoutEventArgs levent)
    {
        base.OnLayout(levent);
        base.AutoSize = false;
    }

Но я все еще получаюта же проблема: AutoSize имеет значение false, поэтому, когда я увеличиваю размер шрифта, я не вижу все свои метки. Текст, но я не могу изменить размер самой метки… Я имею в виду с помощью мыши и ResizeRedraw ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...