The RadAutoCompleteBox does not show its dropdown when single item is suggested.
To reproduce: -wire to the PreviewKeyDown event like this: radMaskedEditBox1.PreviewKeyDown += radMaskedEditBox1_PreviewKeyDown Workaround: -wire to the TextBoxItem PreviewKeyDown: radMaskedEditBox1.MaskedEditBoxElement.TextBoxItem.PreviewKeyDown += TextBoxItem_PreviewKeyDown;
To reproduce: RadColorDialog dialog = new RadColorDialog(); dialog.ColorDialogForm.ColorChanged Workaround: ((RadColorSelector)dialog.ColorDialogForm.RadColorSelector).OkButtonClicked += Form1_OkButtonClicked; //or ((RadColorSelector)dialog.ColorDialogForm.RadColorSelector).ColorChanged+= ColorDialogForm_ColorChanged;
To reproduce: Add a RadSpinEditor and set its Hexadecimal property to true. Set its maximum to 0xFFFFFFFF(4294967295). Try to enter value larger than 7FFFFFFF(Int.MaxValue). You will notice that the value cannot be set. Workaround: public class MySpinEditor : RadSpinEditor { public new MySpinElement SpinElement { get { return base.SpinElement as MySpinElement; } private set { typeof(RadSpinEditor).GetField("spinElement", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(this, value); } } protected override void CreateChildItems(RadElement parent) { this.SpinElement = new MySpinElement(); this.SpinElement.RightToLeft = this.RightToLeft == System.Windows.Forms.RightToLeft.Yes; this.RootElement.Children.Add(this.SpinElement); this.SpinElement.ValueChanging += SpinElement_ValueChanging; this.SpinElement.ValueChanged += SpinElement_ValueChanged; this.SpinElement.TextChanging += SpinElement_TextChanging; this.SpinElement.KeyDown += SpinElement_KeyDown; this.SpinElement.KeyPress += SpinElement_KeyPress; this.SpinElement.KeyUp += SpinElement_KeyUp; } void SpinElement_KeyUp(object sender, KeyEventArgs e) { this.CallBaseOnKeyUp(e); } void SpinElement_KeyPress(object sender, KeyPressEventArgs e) { this.CallBaseOnKeyPress(e); } void SpinElement_KeyDown(object sender, KeyEventArgs e) { this.CallBaseOnKeyDown(e); } void SpinElement_TextChanging(object sender, TextChangingEventArgs e) { this.OnTextChanged(e); } void SpinElement_ValueChanged(object sender, EventArgs e) { this.OnValueChanged(e); } void SpinElement_ValueChanging(object sender, ValueChangingEventArgs e) { this.OnValueChanging(e); } } public class MySpinElement : RadSpinElement { protected override decimal GetValueFromText() { try { if (!string.IsNullOrEmpty(this.Text) && ((this.Text.Length != 1) || (this.Text != "-"))) { decimal resultValue = 0m; if (this.Hexadecimal) { resultValue = this.Constrain(Convert.ToDecimal(Convert.ToInt64(this.Text, 16))); } else { resultValue = this.Constrain(decimal.Parse(this.Text, CultureInfo.CurrentCulture)); } return resultValue; } else { return this.internalValue; } } catch { return this.internalValue; } } protected override Type ThemeEffectiveType { get { return typeof(RadSpinElement); } } }
FIX. RadDateTimePicker - when the NullDate is set for example to DateTime.Now and you clear the value with SetToNullText, then you can not type the value for the current month.
To reproduce: -add RadGridView and use the following code: public static readonly DateTime MIN_DATE = new DateTime(1900, 1, 1); public static readonly DateTime MAX_DATE = new DateTime(2079, 1, 1); public Form1() { InitializeComponent(); var colDate = new Telerik.WinControls.UI.GridViewDateTimeColumn(); colDate.DataType = typeof(System.DateTime); colDate.HeaderText = "Date"; colDate.Name = "colDate"; colDate.FormatString = "{0:d}"; colDate.Width = 85; radGridView1.Columns.Add(colDate); radGridView1.CellEditorInitialized += radGridView1_CellEditorInitialized; } private void radGridView1_CellEditorInitialized(object sender, Telerik.WinControls.UI.GridViewCellEventArgs e) { var editor = this.radGridView1.ActiveEditor as RadDateTimeEditor; if (editor == null) { return; } editor.MinValue = MIN_DATE; editor.MaxValue = MAX_DATE; DateTime date = DateTime.Now; RadDateTimeEditorElement editorElement = (RadDateTimeEditorElement)editor.EditorElement; editorElement.Format = DateTimePickerFormat.Custom; editorElement.CustomFormat = "MM/dd/yyyy"; editorElement.Value = date; e.Row.Cells[e.ColumnIndex].Value = editorElement.Value; } As a result when the user tries to enter a valid year between MinValue and MaxValue it is not possible. Workaround: use CellValidating event: radGridView1.CellValidating += radGridView1_CellValidating; private void radGridView1_CellValidating(object sender, CellValidatingEventArgs e) { RadGridView grid = sender as RadGridView; if (grid.CurrentColumn is GridViewDateTimeColumn) { DateTime currentDate = (DateTime)e.Value; if (currentDate <= MAX_DATE && currentDate >= MIN_DATE) { e.Cancel = false; } else { e.Cancel = true; } } }
To reproduce: public Form1() { InitializeComponent(); this.radMaskedEditBox1.Mask = "00,000-000"; this.radMaskedEditBox1.MaskType = Telerik.WinControls.UI.MaskType.Standard; } private void radButton1_Click(object sender, EventArgs e) { radMaskedEditBox1.Value = null; } Workaround: private void radButton1_Click(object sender, EventArgs e) { radMaskedEditBox1.Value = null; radMaskedEditBox1.Text = ""; }
To reproduce: Add a RadSpellChecker and a RichTextBox, set the spell checker to check the RichTextBox on some button click. Set the main form's TopMost property to true. Start the form, you will notice that sometimes the dialog for spellchecking and the complete messagebox show behind the main form. Workaround: public class MyRadSpellChecker : RadSpellChecker { private FormSettings formSettingsForCurrentSpellCheckIteration = new FormSettings(); public MyRadSpellChecker() { } protected override void CheckAllAtOnce(IControlSpellChecker spellChecker) { Form spellCheckerParentForm = this.GetSpellCheckerParentForm(spellChecker); RadDocument editingElementContentToRadDocument = spellChecker.GetContentAsDocument(); editingElementContentToRadDocument.Measure(RadDocument.MAX_DOCUMENT_SIZE); IControlSpellChecker richTextBoxSpellChecker = this.GetControlSpellChecker(typeof(RadRichTextBox)); SpellCheckAllAtOnceForm checkAllAtOnceWindow = new SpellCheckAllAtOnceForm(editingElementContentToRadDocument, richTextBoxSpellChecker, spellChecker); if (!checkAllAtOnceWindow.HasErrors) { this.ShowSpellCheckingCompleteDialog(spellCheckerParentForm); return; } this.CopyFormSettings(this.FormSettings, checkAllAtOnceWindow); SpellingFormShowingEventArgs args = new SpellingFormShowingEventArgs(checkAllAtOnceWindow, spellChecker); this.OnSpellingFormShowing(args); if (args.Cancel) { return; } Form form = args.SpellingForm; form.ShowDialog(spellCheckerParentForm); } private void CopyFormSettings(FormSettings from, RadForm to) { to.Location = from.Location; to.StartPosition = from.StartPosition; ThemeResolutionService.ApplyThemeToControlTree(to, from.ThemeName); } private void ShowSpellCheckingCompleteDialog(Form parentForm = null) { if (this.EnableCompleteMessageBox) { string themeName = RadMessageBox.ThemeName; RadMessageBox.ThemeName = this.ThemeName; string title = RadSpellCheckerLocalizationProvider.CurrentProvider.GetLocalizedString(RadSpellCheckerStringId.Title); string complete = RadSpellCheckerLocalizationProvider.CurrentProvider.GetLocalizedString(RadSpellCheckerStringId.Complete); RadMessageBox.Show(parentForm, complete, title, MessageBoxButtons.OK); RadMessageBox.ThemeName = themeName; } } protected override void CheckWordByWord(IControlSpellChecker spellChecker) { this.CopyWindowSettings(this.FormSettings, this.formSettingsForCurrentSpellCheckIteration); DialogResult result = DialogResult.None; do { result = this.ShowWindowForNextError(spellChecker); } while (result != DialogResult.None && result == DialogResult.OK); } private void CopyWindowSettings(FormSettings from, FormSettings to) { to.Location = from.Location; to.StartPosition = from.StartPosition; to.ThemeName = from.ThemeName; } private DialogResult ShowWindowForNextError(IControlSpellChecker spellChecker) { Form spellCheckerParentForm = this.GetSpellCheckerParentForm(spellChecker); spellChecker.ResetFields(); IWordInfo incorrectWordInfo = spellChecker.MoveToNextError(); if (incorrectWordInfo == null) { this.ShowSpellCheckingCompleteDialog(spellCheckerParentForm); return DialogResult.None; } RadForm checkWordByWordWindow = new SpellCheckWordByWordForm(incorrectWordInfo.Word, spellChecker); this.CopyFormSettings(this.formSettingsForCurrentSpellCheckIteration, checkWordByWordWindow); SpellingFormShowingEventArgs args = new SpellingFormShowingEventArgs(checkWordByWordWindow, spellChecker); this.OnSpellingFormShowing(args); if (args.Cancel) { return DialogResult.None; } checkWordByWordWindow = args.SpellingForm; spellChecker.CurrentControl.Focus(); return checkWordByWordWindow.ShowDialog(spellCheckerParentForm); } private Form GetSpellCheckerParentForm(IControlSpellChecker spellChecker) { if (spellChecker != null && spellChecker.CurrentControl != null) { return spellChecker.CurrentControl.FindForm(); } return null; } }
To reproduce: Add a radspellchecker and let it check a radrichtextbox. Check an incorrect word and click ignore all. You will see that the dialog shows up again. Workaround: public class MySpellCheckWordByWordForm : SpellCheckWordByWordForm {
RadMaskedEditBox - the ability to access the ErrorProvider in order to change the image or other properties.
To reproduce: -add RadTimePicker and set its value to null. -click the arrow to open the pop up and notice that clock header used the default general DateTime pattern to display the text (e.g. 9/18/2013 12:00:00 AM), instead of using the short time pattern displayed (e.g. 12:00 AM) Workaround: this.radTimePicker1.Value = null; this.radTimePicker1.TimePickerElement.PopupOpened+=TimePickerElement_PopupOpened; private void TimePickerElement_PopupOpened(object sender, EventArgs e) { this.radTimePicker1.TimePickerElement.PopupContentElement.ClockHeaderElement.Text = DateTime.Now.ToString(this.radTimePicker1.TimePickerElement.Format, this.radTimePicker1.TimePickerElement.Culture); }
To reproduce: Create two forms - form 1 has a button which creates a new form 2 Form 2 has a button and a RichTextBox. The button should create a spellchecker. Write something into the richtextbox and click the button. Close the spellchecking form and form 2. Repeat a few times, memory usage should increase.
To reproduce - add some text to the control and its IsReadOnly to true. Right click and observe the context menu Workaround: radTextBoxControl1.ContextMenuOpening += radTextBoxControl1_ContextMenuOpening; void radTextBoxControl1_ContextMenuOpening(object sender, TreeBoxContextMenuOpeningEventArgs e) { e.ContextMenu.DropDownOpened -= ContextMenu_DropDownOpened; e.ContextMenu.DropDownOpened += ContextMenu_DropDownOpened; } void ContextMenu_DropDownOpened(object sender, EventArgs e) { TextBoxControlDefaultContextMenu contextMenu = (TextBoxControlDefaultContextMenu)sender; if (radTextBoxControl1.IsReadOnly) { foreach (RadMenuItemBase item in contextMenu.Items) { if (item.Text == "Cu&t" || item.Text == "&Copy" || item.Text == "&Paste" || item.Text == "&Delete") { item.Enabled = false; } } } }
To reproduce: Add RadAutoCompleteTextBox, add a AutoCompleteDataSource, complete a word, click the close button of the word, try to type. Workaround: void RadForm1_Load(object sender, EventArgs e) { RemoveFocus(); } void radAutoCompleteBox1_TextChanged(object sender, EventArgs e) { RemoveFocus(); } private void RemoveFocus() { foreach (var item in this.radAutoCompleteBox1.TextBoxElement.ViewElement.Children) { foreach (var btn in item.Children) { var radButtonElement = btn as RadButtonElement; if (radButtonElement != null) { radButtonElement.CanFocus = false; } } } }
RadMaskEditBox - does not work correctly when the whole text is selected and user presses key "Enter". Control removes the last character. Workaround: Public Class Form1 Dim text1 As String Dim text2 As String Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown If e.KeyData = Keys.Enter Then SendKeys.Send("{TAB}") End If End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.RadMaskedEditBox1.MaskType = Telerik.WinControls.UI.MaskType.Standard Me.RadMaskedEditBox2.MaskType = Telerik.WinControls.UI.MaskType.Standard Me.RadMaskedEditBox1.Mask = "00/00/00" Me.RadMaskedEditBox1.Text = "__/__/__" Me.RadMaskedEditBox2.Mask = "00/00/00" Me.RadMaskedEditBox2.Text = "__/__/__" End Sub Private Sub RadMaskedEditBox1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles RadMaskedEditBox1.GotFocus RadMaskedEditBox1.SelectAll() text1 = Me.RadMaskedEditBox1.Text End Sub Private Sub RadMaskedEditBox1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles RadMaskedEditBox1.LostFocus Me.RadMaskedEditBox1.Text = text1 End Sub Private Sub RadMaskedEditBox1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles RadMaskedEditBox1.KeyDown If e.KeyData = Keys.Enter Then text1 = Me.RadMaskedEditBox1.Text End If End Sub Private Sub RadMaskedEditBox2_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles RadMaskedEditBox2.GotFocus RadMaskedEditBox2.SelectAll() text2 = Me.RadMaskedEditBox2.Text End Sub Private Sub RadMaskedEditBox2_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles RadMaskedEditBox2.LostFocus Me.RadMaskedEditBox2.Text = text2 End Sub Private Sub RadMaskedEditBox2_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles RadMaskedEditBox2.KeyDown If e.KeyData = Keys.Enter Then text2 = Me.RadMaskedEditBox2.Text End If End Sub End Class
This behavior comes from the nested MaskedEditBox. RadDateTimePicker behaves the same way - this is core logic and should be the same.
RadSpellCheckerLocalizationProvider - The word dictionary is misspelled in case RadSpellCheckerStringId.NotInDictionary. Workaround: Create custom localization provider and override incorrect string.
Put couple text boxes on a form in design time and you will have to press Shift+TAB twice to get the focus to the previously focused text box.
Until Q3 2012 the position of the check box has been on the left hand side of the control. After Q3 the position of the check box is between the text box and the arrow button. The correct position is on the left hand side.
To reproduce: add a token to the control and attempt adding the same token with this code in the CreateTextBlock event handler: void radAutoCompleteBox1_CreateTextBlock(object sender, CreateTextBlockEventArgs e) { if (e.TextBlock is TokenizedTextBlockElement) { foreach (RadListDataItem item in radAutoCompleteBox1.AutoCompleteItems) { if (item.Text.ToLower() == e.Text.ToLower()) { e.TextBlock = new TokenizedTextBlockElement("pepo"); break; // TODO: might not be correct. Was : Exit For } } } } Workaround: void radAutoCompleteBox1_CreateTextBlock(object sender, CreateTextBlockEventArgs e) { if (e.TextBlock is TokenizedTextBlockElement) { foreach (RadListDataItem item in radAutoCompleteBox1.AutoCompleteItems) { if (item.Text.ToLower() == e.Text.ToLower()) { TokenizedTextBlockElement element = new TokenizedTextBlockElement(); element.ContentElement.Text = item.Text; e.TextBlock = element; } } } }