To reproduce:
1. Add three SplitPanels in horizontal mode.
2. Use the following code snippet.
3. Drag the second splitter upwards. It changes the height on the first panel
void RadForm1_Load(object sender, EventArgs e)
{
FixHeight(splitPanel1);
FixHeight(splitPanel3);
}
public static void FixHeight(SplitPanel panel)
{
panel.SizeInfo.MinimumSize = new Size(0, 55);
panel.SizeInfo.MaximumSize = new Size(0, 55);
}
In this particular case, the main monitor has 125% DPI. When showing a RadForm which contains RadSplitContainer with 2 panels, the control is not scaled correctly.
Expected:
Current behavior:
Workaround:
Set the RadControl.EnableRadAutoScale property to false.
Dear Sir/Madam
Unfortunately, the SplitContainer in the .NET version 5 has problems, as you can see in the picture, I can not change the size in design time.
Is there a newer version that fixes this problem?
Telerik Winform Version :2020.3.1020
Visual Studio Version : 16.8.3
Best Regards
this.radSplitContainer2.Cursor = System.Windows.Forms.Cursors.SizeNS;
A project to reproduce is attached
Thanks
The Modifiers property should be visible in the properties window when a SplitPanel instance is selected. Workaround: Manually change the modifier in the Designer.cs file to protected.
Backgroud
The behavior of split button makes me confused when I use split button collapsing the split panel. It locates in different position when I restore the split button by double-click. What's weirder is that double-click will make no effect when the split button located on the edge. I don't like these default behaviours.
Question
1. Do you know how to overwrite the default behaviour of split button?
2. Is there a virtual method or some event I can reimplement?
3. I want to collapse the right panel to the right side, and restore it to the initial location, and just these to behaviours. How can I do it?
Thanks!
Use attached to reproduce. Move the splitter with the mouse and you will notice that is position is not correct when the mouse is released
To reproduce: - Use relative sizing and save the RelativeRatio. - Set the same value after restarting the application. - The panel size is not the same. Workaround: Use absolute size.
To reproduce: Add a RadSplitContainer with several SplitPanels and use the following code: this.radSplitContainer1.EnableCollapsing = true; this.radSplitContainer1.UseSplitterButtons = true; If you run the project, you will notice that the next/previous buttons are displayed for manipulating the SplitPanel's collapsed/expanded state. If you click one of the next/previous buttons, the relevant SplitPanel will be collapsed and the splitter will remain visible. Thus, the user has the possibility to return the previous state of the SplitPanel. However, if you try to collapse the SplitPanel programmatically by setting the Collapsed property to true, the corresponding splitter will disapper.
The end user should be able to specify what Cursor to be used while resizing a panel. Currently this can be achieved using the custom control below: public class MyRadSplitContainer : RadSplitContainer { private bool isResizing; public override string ThemeClassName { get { return typeof(RadSplitContainer).FullName; } } protected override void OnMouseDown(MouseEventArgs e) { if (e.Button == MouseButtons.Left && this.ContentRectangle.Contains(e.Location)) { SplitterElement splitter = GetSplitterElementAtPoint(e.Location); if (splitter != null && !splitter.Fixed) { this.isResizing = true; } base.OnMouseDown(e); } } protected override void OnMouseUp(MouseEventArgs e) { base.OnMouseUp(e); this.isResizing = false; } public override Cursor Cursor { get { Cursor cursor = base.Cursor; if (this.isResizing && cursor == Cursors.SizeWE) { cursor = Cursors.VSplit; } else if (this.isResizing && cursor == Cursors.SizeNS) { cursor = Cursors.HSplit; } return cursor; } set { if (value == Cursors.VSplit) { value = Cursors.SizeWE; } else if (value == Cursors.HSplit) { value = Cursors.SizeNS; } base.Cursor = value; } } }
The scenario that we want to cover is to disable resizing the split panels but still enable the option for expanding/collapsing them via the buttons.
Please refer to the attached sample project. Double click the middle splitter in the horizontal split container. Workaround: manually collapse the desired split panel: private void Form1_Load(object sender, EventArgs e) { this.radSplitContainer3.PanelCollapsing += radSplitContainer3_PanelCollapsing; foreach (SplitterElement s in this.radSplitContainer3.Splitters) { s.DoubleClick += s_DoubleClick; } } private void s_DoubleClick(object sender, EventArgs e) { SplitterElement s = sender as SplitterElement; ((SplitPanel)s.RightNode).Collapsed = true; }
How to reproduce: check the attached video Workaround: Only split panels can be added to RadSplitContainer, so add a panel first to the control before using the document outline
Workaround: check the attached project
The mouse cursor should not also change to split. How to reproduce: set certain splitter elements to be fixed, then you would notice that they have the resizing image visible and the cursor changes to split if you hover them Workaround: manually hide the layout element and use a custom control overriding its Cursor property public partial class Form1 : Form { public Form1() { InitializeComponent(); new RadControlSpyForm().Show(); this.radSplitContainer1.EnableCollapsing = true; this.radSplitContainer1.UseSplitterButtons = true; } protected override void OnShown(EventArgs e) { base.OnShown(e); foreach (SplitterElement splitter in this.radSplitContainer1.Splitters) { splitter.Fixed = true; splitter.Layout.Visibility = ElementVisibility.Collapsed; } } private void button1_Click(object sender, EventArgs e) { foreach (SplitterElement splitter in this.radSplitContainer1.Splitters) { splitter.Fixed = !splitter.Fixed; splitter.Layout.Visibility = !splitter.Fixed ? ElementVisibility.Visible : ElementVisibility.Collapsed; } } } public class MyRadSplitContainer : RadSplitContainer { public override string ThemeClassName { get { return typeof(RadSplitContainer).FullName; } } public override Cursor Cursor { get { return base.Cursor; } set { SplitterElement splitter = this.GetSplitterElementAtPoint(this.PointToClient(Cursor.Position)); if (!(splitter != null && splitter.Fixed)) { base.Cursor = value; } } } }
Add right to left support. This should be the same as in the standard split container – the panels should be swapped.
To reproduce: add a RadSplitContainer with 3 identical SplitPanels. The left panel needs to be initially collapsed. That is why we use the introduced public API (MoveSplitter method). When the form is shown and you try to expand the left (yellow) panel, you will notice that the splitter is not restored to the correct position. Please refer to the attached gif file. This must be handled for Vertical and Horizontal orientation!!! Workaround: Private Sub RadForm1_Load(sender As Object, e As EventArgs) Handles MyBase.Load AddHandler Me.RadSplitContainer1.MouseDown, AddressOf SplitContainerMouseDown End Sub Private Sub SplitContainerMouseDown(sender As Object, e As MouseEventArgs) Dim clickedElement = Me.RadSplitContainer1.ElementTree.GetElementAtPoint(e.Location) If TypeOf clickedElement Is SplitterElement Or TypeOf (clickedElement.Parent) Is SplitterElementLayout Then RadSplitContainer1.RestoreSplitterPosition(Me.RadSplitContainer1.Splitters(0)) RemoveHandler Me.RadSplitContainer1.MouseDown, AddressOf SplitContainerMouseDown End If End Sub