I have inherited a radSpinEditor.
All my controls are 21px in height with the Fluent theme.
The bottom part (border) of the control is not shown correctly.
Attached is the rendering
My control:
public partial class IntegerTextBox : RadSpinEditor { public IntegerTextBox() { InitializeComponent(); ShowUpDownButtons = false; Value = 0; DecimalPlaces = 0; TextAlignment = HorizontalAlignment.Right; Padding = new Padding(0, 0, 3, 0); Height = 21; MinimumSize = new Size(0, 20); } }
Here is what was generated in the designer :
// // numericUpDownSalYears// this.numericUpDownSalYears.AutoSize = false;this.numericUpDownSalYears.Location = new System.Drawing.Point(180, 36);this.numericUpDownSalYears.MinimumSize = new System.Drawing.Size(0, 21);this.numericUpDownSalYears.Name = "numericUpDownSalYears";this.numericUpDownSalYears.Padding = new System.Windows.Forms.Padding(0, 0, 3, 0);13 Answers, 1 is accepted
The inner TextBoxItem has a default margin which should be removed in this case. In addition, you can set the bottom border width, and a little smaller font:
public class IntegerTextBox : RadSpinEditor{ public IntegerTextBox() { ShowUpDownButtons = false; Value = 0; DecimalPlaces = 0; TextAlignment = HorizontalAlignment.Right; Padding = new Padding(0, 0, 3, 0); Height = 21; MinimumSize = new Size(0, 20); this.AutoSize = false; this.MinimumSize = new System.Drawing.Size(0, 21);
this.SpinElement.TextBoxItem.Margin = new Padding(0); this.Font = new Font("Segoe UI", 8, FontStyle.Regular); var borderPrimitive = this.SpinElement.Children[1] as BorderPrimitive; borderPrimitive.BottomWidth = 2; }}I hope this will be useful. Let me know if you have additional questions.
Regards,
Dimitar
Progress Telerik
Thanks Dimitar, it worked.
But now I have a different visual problem : I need the text to be aligned vertically just as the RadDropDownList beside.
I prefer modifying the IntegerTextBox and not all the RadDropDownList used (we didn't inherit it so must modifiy all the instances that I don't want toif possible).
Printscreen attached
thanks
Since all editors in the fluent theme are 24 pixels high by default, you must have applied some changes to DropDownList as well. Could you please send me the changes that you have made to the DropDownList. This way I will be able to reproduce the exact case on my side.
In general, you should try setting the top margin, but if its too much the bottom border can be hidden again:
this.SpinElement.TextBoxItem.Margin = new Padding(0, 1,0,0);I am looking forward to your reply.
Dimitar
Progress Telerik
public partial class DropDownList : RadDropDownList { int _maxPopupWidth = 0; int _maxPopupHeight = 0; public DropDownList() { InitializeComponent(); PopupOpening += maindropDownList_PopupOpening; ShowItemToolTips = true; DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDownList; EnableMouseWheel = false; ToolTipTextNeeded += DropDownList_ToolTipTextNeeded; VisualListItemFormatting += DropDownList_VisualListItemFormatting; KeyUp += DropDownList_KeyUp; if (DropDownListElement.AutoCompleteSuggest == null) { DropDownListElement.AutoCompleteSuggest = new AutoCompleteSuggestHelper(DropDownListElement); } PopupOpened += radDropDownList1_PopupOpened; PopupClosed += radDropDownList1_PopupClosed; } private void DropDownList_KeyUp(object sender, KeyEventArgs e) { Keys[] keys = { Keys.Delete, Keys.Back }; if (keys.Contains(e.KeyCode)) { SelectedIndex = -1; } } private void DropDownList_VisualListItemFormatting(object sender, VisualItemFormattingEventArgs args) { if (args != null && args.VisualItem != null) { args.VisualItem.ToolTipText = args.VisualItem.Text; } } private void DropDownList_ToolTipTextNeeded(object sender, Telerik.WinControls.ToolTipTextNeededEventArgs e) { if (SelectedItem != null) { e.ToolTipText = SelectedItem.Text; } } private void maindropDownList_PopupOpening(object sender, System.ComponentModel.CancelEventArgs e) { var radControl = sender as RadDropDownListElement; var tempSize = ManageWidthSize(radControl); _maxPopupWidth = tempSize.Width; _maxPopupHeight = tempSize.Height; radControl.AutoCompleteSuggest.DropDownList.PopupOpening -= null; radControl.AutoCompleteSuggest.DropDownList.PopupOpening += autoSuggestDropDownList_PopupOpening; // set same as this one radControl.AutoCompleteSuggest.DropDownList.DropDownSizingMode = DropDownSizingMode; } private void autoSuggestDropDownList_PopupOpening(object sender, System.ComponentModel.CancelEventArgs e) { var radControl = sender as RadDropDownListElement; radControl.Popup.MaximumSize = new System.Drawing.Size(_maxPopupWidth, _maxPopupHeight); radControl.Popup.MinimumSize = new System.Drawing.Size(_maxPopupWidth, _maxPopupHeight); } private static Size ManageWidthSize(RadDropDownListElement list) { int width = 0; foreach (var item in list.Items) { width = Math.Max(width, TextRenderer.MeasureText(item.Text, list.Font).Width); } if (list.Items.Count * (list.ItemHeight - 1) > list.DropDownHeight) { width += list.ListElement.VScrollBar.Size.Width; } list.Popup.Width = width + 20; return new Size(width + 20, list.ListElement.VScrollBar.Size.Height); } protected override Size DefaultSize { get { return new Size(180, 21); } } public override string ThemeClassName { get { return typeof(RadDropDownList).FullName; } } void radDropDownList1_PopupOpened(object sender, EventArgs e) { EnableMouseWheel = true; } void radDropDownList1_PopupClosed(object sender, Telerik.WinControls.UI.RadPopupClosedEventArgs args) { EnableMouseWheel = false; } }Hi, this is my wrapper, but can't find the underlying elements to shrink the control to be squared.
Look at joined file. The backcolor of the button goes too much at the bottom and there is also a line (between white rectangle and the button).
Here is the the .designer part of an implemantation:
this.cboBasic.AutoSize = false;this.cboBasic.DropDownAnimationEnabled = false;this.cboBasic.DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDownList;this.cboBasic.EnableMouseWheel = false;this.cboBasic.Location = new System.Drawing.Point(180, 73);this.cboBasic.Name = "cboBasic";this.cboBasic.Size = new System.Drawing.Size(280, 21);this.cboBasic.TabIndex = 1;this.cboBasic.ThemeName = "Fluent";((Telerik.WinControls.UI.RadDropDownListElement)(this.cboBasic.GetChildAt(0))).DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDownList;thanks
I have investigated this and it is caused by an issue in our implementation. I have logged this issue on our Feedback Portal. You can track its progress, subscribe to status changes and add your comment to it here. I have also updated your Telerik Points.
To workaround, this set the MaxSize of the following element:
radDropDownList1.DropDownListElement.Children[3].MaxSize = new Size(1, 1);In addition, you need to leave the AutoSize property to true. You can remove the code that sets the autocomplete mode as well. It would not take effect when the DropDownStyle is set to DropDownList.
Should you have any other questions do not hesitate to ask.
Regards,
Dimitar
Progress Telerik
Hi Dimitar,
I tried your workaround and didn't work. There is only 2 children so .Children[3] throws a null exception.
I tried putting this in the constructor after the InitializeComponent(); call.
Where should I put your line of code : in my DropDownList's class or each of my 2000 instantiation?
thanks
The code should be added after setting the auto-complete mode. You can add it to your custom implementation at the end of the constructor. It appears that we have a property for this as well so you can directly set it. Here is the code:
public DropDownList(){ PopupOpening += maindropDownList_PopupOpening; ShowItemToolTips = true; DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDown; EnableMouseWheel = false; ToolTipTextNeeded += DropDownList_ToolTipTextNeeded; VisualListItemFormatting += DropDownList_VisualListItemFormatting; KeyUp += DropDownList_KeyUp; if (DropDownListElement.AutoCompleteSuggest == null) { DropDownListElement.AutoCompleteSuggest = new AutoCompleteSuggestHelper(DropDownListElement); } PopupOpened += radDropDownList1_PopupOpened; PopupClosed += radDropDownList1_PopupClosed; this.DropDownListElement.AutoCompleteSuggest.DropDownList.MaxSize = new Size(1, 1);}Let me know how this works on your side.
Regards,
Dimitar
Progress Telerik
Hi Dimitar,
the provided code didn't worked : set AutoSize =True (where control is used) and adding your MaxSize line.
The AutoSize makes the control go up to 24 in Height and I want a maximum of 21!
I tried setting a MaximumSize (0,21) in DropDownList's constructor, but I have the same result as before, which a line goes past down and the client sees it (image attached).
Any other clues?
thanks
I am not sure why this is not working on your side. I have attached my test project and this works there with yours and the default drop-down lists.
In addition, I want to clarify that we are using a separate drop-down list element for the autocomplete functionality and only its popup is visible when needed. This is why its max size can be set to 1,1.
Let me know if I am missing a specific case where this is not working.
Regards,
Dimitar
Progress Telerik
Hi Dimitar,
your provided code makes the DropDownList control's height at 24, not 21!
I added a MaxSize of (280,21) and you have the same problem as we do. Just like the last picture I send.
Bear in mind that we have more than 100 instances of this control so we would prefer to modify the control itself and not all the individual instances.
thanks
Yes, the mistake is mine (setting the autocomplete mode makes the editor even larger). Please note that by default all editors height in the Fluent theme is 24. To make the editor 21 you need to remove the padding and the margin of its elements. In this case, add the following two lines to the constructor of your custom control:
cboBasic.DropDownListElement.TextBox.Margin = new Padding(0);cboBasic.DropDownListElement.ArrowButton.Padding = new Padding(2,0,2,0);The attached image shows the result on my side as well.
Do not hesitate to contact us if you have other questions.
Dimitar
Progress Telerik
That works!
thanks Dimitar
