Search code examples
c#winformscheckboxword-wrap

How can I make the text of checkbox wraps automatically with changing form width?


In windows forms I have checkbox list that contains long text, the form is re-sizable..

can I make the text wraps automatically in run-time according to the form width ?


Solution

  • I tried many approaches but at last this one worked after a lot of researches:-

    simply I used two events to detect size change of the panel contains the controls then I adjusted the controls accordingly..

    first event is LayoutEventHandler, second event for detecting resolution change

    in these events:-

    1- get the panel width considering the resolution (lower accepted resolution is 1024x768)

      Rectangle resolution = Screen.PrimaryScreen.Bounds;
      int panelWidth *= (int)Math.Floor((double)resolution.Width / 1024);
    

    2- loop on all controls and adjust the control width to fit the panel width (i subtracted 10 pixels for vertical scroll width), then I got the control height from MeasureString function which takes the control text, the font and control width, and return the control size.

    (i.e. I multiplied the height with a roughly factor "1.25" to overcome line height and padding)

      foreach (var control in controls)
      {
          if (control is RadioButton || control is CheckBox)
          {
                 control.Width = panelWidth - 10;
    
                 Font fontUsed = control.Font;
                 using (Graphics g = control.CreateGraphics())
                 {
                   SizeF size = g.MeasureString(control.Text, fontUsed, control.Width);
                  control.Height = (int)Math.Ceiling(size.Height * 1.25);
                }
           }
      }