To reproduce: - Hide the border and change the BackColor of the form. - Dock a MenuStrip to the top. - You will notice that there are 2 pixels on the left and right sides of the menu. Project is attached as well.
A possible workaround is to set the RadControl.EnableDpiScaling property to false. static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { RadControl.EnableDpiScaling = false; Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new RadForm1()); } } Another workaround is to mark the application as DPI-aware: https://docs.telerik.com/devtools/winforms/telerik-presentation-framework/dpi-support
Workaround: Sub New() InitializeComponent() AddHandler RadMessageBox.Instance.LocationChanged, AddressOf MsgLocationChanged End Sub Private Sub MsgLocationChanged(sender As Object, e As EventArgs) RadMessageBox.Instance.Location = New Point(Me.Location.X + Me.Width / 2 - RadMessageBox.Instance.Width / 2, _ Me.Location.Y + Me.Height / 2) End Sub
How to reproduce: set the Size property of the form in the designer of Visual Studio, pay attention to the serialized ClientSize value. Run the form and check the ClientSize, it has increased Workaround: public partial class Form2 : RadForm { public Form2() { InitializeComponent(); Padding p = TelerikDpiHelper.ScalePadding(this.FormBehavior.ClientMargin, new SizeF(1f / this.RootElement.DpiScaleFactor.Width, 1f / this.RootElement.DpiScaleFactor.Height)); this.MaximumSize = new Size(this.Size.Width - p.Horizontal, this.Size.Height - p.Vertical- this.FormBehavior.ClientMargin.Bottom + this.FormElement.TitleBar.Size.Height); } protected override void OnShown(EventArgs e) { base.OnShown(e); this.MaximumSize = new Size(0, 0); } }
How to reproduce: just create a RadForm, in the designer change its size and set its FormBorderStyle property to be None. When the form loads its size will be increased. Workaround: set its MaximumSize property this.MaximumSize = new Size(400, 80);
To reproduce: follow the steps from the attached gif file. Workaround: public RadForm1() { InitializeComponent(); ((RadRibbonFormBehavior)this.FormBehavior).AllowTheming = false; }
Please refer to the attached sample project. Workaround: Initialize the form just before showing it.
To reproduce: Create a RadForm, select a material theme from the ToolBox, and apply the theme to the Form. Set the size of the Form to anything simple like (300, 300) and then save and close out the Form. When you reopen the same Form it will grow to (304, 302). Please refer to the attached gif file. Workaround: set the size at run time.
The issue can be reproduced by creating a form with a width of 1200 pixels in an application that is DPI aware. Then the project is run on a tablet with low resolution and an increased DPI, e.g. 1024 x 768 and scaling 120%. Workaround: Public Class RadForm1 Sub New() InitializeComponent() Dim g = Me.CreateGraphics() Dim scale = 96.0 / g.DpiX Me.Size = New Size(scale * Me.ClientSize.Width, scale * Me.ClientSize.Height) g.Dispose() Me.WindowState = FormWindowState.Normal End Sub End Class
How to reproduce: Add a StatusStrip to the form and set the FormBorderStyle to FixedSingle, you will notice that the form can be resized using the sizing grip of the status strip Workaround: public partial class Form2 : RadForm { public Form2() { InitializeComponent(); this.FormBorderStyle = FormBorderStyle.FixedSingle; } protected override FormControlBehavior InitializeFormBehavior() { return new CustomRadFormBehavior(this, true); } } public class CustomRadFormBehavior : RadFormBehavior { public CustomRadFormBehavior(IComponentTreeHandler treeHandler, bool shouldCreateChildren) : base(treeHandler, shouldCreateChildren) { } public override bool HandleWndProc(ref Message m) { if ((m.Msg) == NativeMethods.WM_NCLBUTTONDOWN) { Point screenLocation = new Point(m.LParam.ToInt32()); Point location = this.GetMappedWindowPoint(screenLocation); RadElement itemUnderMouse = this.Form.ElementTree.GetElementAtPoint(location); MouseEventArgs args = new MouseEventArgs(Control.MouseButtons, 1, location.X, location.Y, 0); bool isFixed = false; if (this.Form != null && this.Form.FormBorderStyle == FormBorderStyle.Fixed3D || this.Form.FormBorderStyle == FormBorderStyle.FixedDialog || this.Form.FormBorderStyle == FormBorderStyle.FixedSingle || this.Form.FormBorderStyle == FormBorderStyle.FixedToolWindow) { isFixed = true; } if (isFixed && itemUnderMouse != null && itemUnderMouse.Enabled && !object.ReferenceEquals(itemUnderMouse, (this.Form.RootElement.Children[0] as RadFormElement).TitleBar)) { return true; } } return base.HandleWndProc(ref m); } }
How to reproduce: public partial class RadForm1 : RadForm { public RadForm1() { InitializeComponent(); this.AllowTheming = false; this.FormBorderStyle = FormBorderStyle.FixedSingle; } } Workaround: public partial class RadForm1 : RadForm { public RadForm1() { InitializeComponent(); this.AllowTheming = false; this.FormBorderStyle = FormBorderStyle.FixedSingle; } protected override FormControlBehavior InitializeFormBehavior() { return new MyRadFormBehavior(this, true); } } public class MyRadFormBehavior : RadFormBehavior { public MyRadFormBehavior(IComponentTreeHandler treeHandler, bool shouldCreateChildren) : base(treeHandler, shouldCreateChildren) { } public override bool HandleWndProc(ref System.Windows.Forms.Message m) { BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.NonPublic; if (m.Msg == NativeMethods.WM_NCHITTEST) { typeof(RadFormBehavior).GetMethod("OnWMNCHittest", bindingFlags).Invoke(this, new object[] { m }); return true; } if (!this.AllowTheming) { return false; } return base.HandleWndProc(ref m); } }
Workaround: change all RadForms to inherit the following custom base form public class RadFormBase : RadForm { protected override void OnLoad(EventArgs e) { if (this.IsDesignMode) { this.BackColor = Color.Empty; } base.OnLoad(e); } public override Color BackColor { get { return this.ElementTree.RootElement.BackColor; } set { if (value == Color.Empty) { this.ElementTree.RootElement.ResetValue(VisualElement.BackColorProperty, ValueResetFlags.Local); } else { this.ElementTree.RootElement.BackColor = value; } } } }
Use attached to reproduce. The exception message: "A circular control reference has been made. A control cannot be owned by or parented to itself.". Workaround: Do not specify the owner when showing the message box.
Please refer to the attached screenshot and sample project. Workaround: call the RadForm.EndInit method before showing the form.
To reproduce: public partial class RadRibbonForm1 : Telerik.WinControls.UI.RadRibbonForm { public RadRibbonForm1() { InitializeComponent(); this.AllowAero = true; this.RibbonBar.QuickAccessToolbarBelowRibbon = false; } } Note: the system buttons not always handle the mouse click. Workaround: set AllowAero to false OR RibbonBar.QuickAccessToolbarBelowRibbon to true.
RadForm has AllowTheming property which enables/disables the aero effects of RadForm and when you set it to false our theming mechanism is disabled. Add a property,e.g. ThemeResolutionService.ApplicationAllowTheming, which will control the AllowTheming of all forms in the application. In addition, RadForm should have a new property,e.g. EnableApplicationAllowTheming, which will control whether the respective form should respect the global property or not. Case 1: ThemeResolutionService.ApplicationAllowTheming = true RadForm1.EnableApplicationAllowTheming=true //this property is set to true; this indicates that the local AllowTheming property WON'T be respected and the global property ApplicationAllowTheming takes effect RadForm1.AllowTheming=false RadForm1 has theming. RadForm2.EnableApplicationAllowTheming=false //this property is set to false; this indicates that the local AllowTheming WILL be respected and the global property ApplicationAllowTheming DOESN'T take effect RadForm2.AllowTheming=false RadForm2 doesn't have theming. Case 2: ThemeResolutionService.ApplicationAllowTheming = false RadForm1.EnableApplicationAllowTheming=true //this property is set to true; this indicates that the local AllowTheming property WON'T be respected and the global property ApplicationAllowTheming takes effect RadForm1.AllowTheming=true RadForm1 doesn't have theming. RadForm2.EnableApplicationAllowTheming=false //this property is set to false; this indicates that the local AllowTheming WILL be respected and the global property ApplicationAllowTheming DOESN'T take effect RadForm2.AllowTheming=true RadForm2 has theming. Note: the same logic is implemented for the ThemeResolutionService.ApplicationThemeName: http://docs.telerik.com/devtools/winforms/themes/using-a-default-theme-for-the-entire-application
Use attached to reproduce.
To reproduce: run the attached sample project and refer to the screenshot. Workaround: ((TextPrimitive)this.FormElement.TitleBar.CaptionElement).UseCompatibleTextRendering=true; or set the RadForm.AllowTheming property to false.
Telerik UI overflow exception with certain pointing devices, especially the LogiTech TouchPad T650. (an Int32 somewhere needs to be an Int64?) StackTrace: at Telerik.WinControls.UI.RadFormBehavior.OnWMNCHittest(Message& m) at Telerik.WinControls.UI.RadFormBehavior.HandleWndProc(Message& m) at Telerik.WinControls.UI.RadFormControlBase.WndProc(Message& m)