Hello everybody,
at first, the controls involved in the problem are the following:
- RadTextBox
- RadSpellchecker (spell check as you type mode)
- ContextMenuStrip
I want to use a RadTextBox within a customized ContextMenuStrip and a RadSpellchecker. The problem is, that the RadSpellchecker overwrites the customized ContextMenuStrip with its own ContextMenuStrip if there are wrong words.
Have you an idea how to use the customized ContextMenuStrip and the RadSpellchecker ContextMenuStrip at the same time?
Many thanks in advance for your help
Dennis
at first, the controls involved in the problem are the following:
- RadTextBox
- RadSpellchecker (spell check as you type mode)
- ContextMenuStrip
I want to use a RadTextBox within a customized ContextMenuStrip and a RadSpellchecker. The problem is, that the RadSpellchecker overwrites the customized ContextMenuStrip with its own ContextMenuStrip if there are wrong words.
Have you an idea how to use the customized ContextMenuStrip and the RadSpellchecker ContextMenuStrip at the same time?
Many thanks in advance for your help
Dennis
3 Answers, 1 is accepted
0
Hello Dennis,
Thank you for writing.
Instead of using a ContextMenuStrip, I would recommend you to use a RadContextMenu. You need to subscribe to the RadTextBox.TextBoxElement.TextBoxItem.HostedControl.MouseDown event and show the RadContextMenu as demonstrated in Menus >> Context Menus help article. However, if there are misspelled words under the mouse the respective spell-checking pop up will be displayed which is desired behavior. You can prevent it from showing by canceling the TextBoxSpellChecker.DropDownMenu.PopupOpening event. Here is a sample code snippet demonstrating how to show a RadContextMenu on right mouse down when now errors are available:
I hope this information helps. Should you have further questions, I would be glad to help.
Regards,
Desislava
Telerik
Thank you for writing.
Instead of using a ContextMenuStrip, I would recommend you to use a RadContextMenu. You need to subscribe to the RadTextBox.TextBoxElement.TextBoxItem.HostedControl.MouseDown event and show the RadContextMenu as demonstrated in Menus >> Context Menus help article. However, if there are misspelled words under the mouse the respective spell-checking pop up will be displayed which is desired behavior. You can prevent it from showing by canceling the TextBoxSpellChecker.DropDownMenu.PopupOpening event. Here is a sample code snippet demonstrating how to show a RadContextMenu on right mouse down when now errors are available:
public Form1(){ InitializeComponent(); this.radSpellChecker1.AutoSpellCheckControl = this.radTextBox1; this.radTextBox1.TextBoxElement.TextBoxItem.HostedControl.MouseDown += HostedControl_MouseDown; this.radTextBox1.TextBoxElement.TextBoxItem.HostedControl.ContextMenuStrip = this.contextMenuStrip1; TextBoxSpellChecker tbSpellChecker = this.radSpellChecker1.GetControlSpellChecker(typeof(RadTextBox)) as TextBoxSpellChecker; if (tbSpellChecker != null) { tbSpellChecker.DropDownMenu.PopupOpening += DropDownMenu_PopupOpening; }}private void HostedControl_MouseDown(object sender, MouseEventArgs e){ if (e.Button == MouseButtons.Right) { //if no errors exist, show the RadContextMenu TextBoxSpellChecker tbSpellChecker = this.radSpellChecker1.GetControlSpellChecker(typeof(RadTextBox)) as TextBoxSpellChecker; Regex wordParser = new Regex("[\\p{L}\\p{N}\\p{M}]+(?:[-.'´_@][\\p{L}|\\p{N}|\\p{M}]+)*", RegexOptions.Compiled); Telerik.WinControls.RichTextBox.Proofing.DocumentSpellChecker checker = tbSpellChecker.SpellChecker as Telerik.WinControls.RichTextBox.Proofing.DocumentSpellChecker; bool containsError = false; foreach (Match word in wordParser.Matches(this.radTextBox1.Text + "")) { if (!checker.CheckWordIsCorrect(word.Captures[0].Value)) { containsError = true; break; } } if (!containsError) { Point p = (sender as Control).PointToScreen(e.Location); radContextMenu1.Show(p.X, p.Y); } }}private void DropDownMenu_PopupOpening(object sender, CancelEventArgs args){ //cancel it if you do not want the pop up with suggestions to show args.Cancel = true;}I hope this information helps. Should you have further questions, I would be glad to help.
Regards,
Desislava
Telerik
Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.
0
Dennis
Top achievements
Rank 1
answered on 03 Feb 2015, 11:01 AM
Dear Desislava,
thank you for your answer. It helps me allmost for the hole problem. It leaves just a litte problem, maybe you can help me.
I tried manny ways, but everything fails.
For a better understanding, I added the code of my textbox below:
These are the possible szenarios:
1. All typed words are correct:
- right click in the textbox shows a context menu with copy/paste button -> works
2. E.g. one of five words is miss spelled:
- right click on the miss spelled word shows a context menu of the spellchecker + copy/paste button -> works
- right click on a right spelled word shows just the context menu with the copy/paste button -> fails
I hope my explanaition is understandable :-)
Best regards,
Dennis
thank you for your answer. It helps me allmost for the hole problem. It leaves just a litte problem, maybe you can help me.
I tried manny ways, but everything fails.
For a better understanding, I added the code of my textbox below:
001.using System;002.using System.Collections.Generic;003.using System.ComponentModel;004.using System.Drawing;005.using System.Data;006.using System.Linq;007.using System.Text;008.using System.Windows.Forms;009.using Telerik.WinControls.UI;010.using System.Text.RegularExpressions;011. 012.namespace Dennis.Controls013.{014. public partial class TextBox : Telerik.WinControls.UI.RadTextBox015. {016. #region Variablen017. private Telerik.WinControls.UI.RadSpellChecker spellchecker = new RadSpellChecker();018. private bool _IsSpellcheckAktiv = false;019. #endregion Variablen020. 021. #region Propertys022. /// <summary>023. /// Activates or inaktivates the spellcheck option for the textbox.024. /// </summary>025. public bool IsSpellcheckAktiv026. {027. get { return this._IsSpellcheckAktiv; }028. set029. {030. if (this._IsSpellcheckAktiv != value)031. {032. this._IsSpellcheckAktiv = value;033. this.SpellcheckActivation();034. }035. }036. }037. #endregion Propertys038. 039. #region Constructors040. /// <summary>041. /// Standard constructor042. /// </summary>043. public TextBox()044. {045. InitializeComponent();046. 047. this.TextBoxElement.Border.ForeColor = System.Drawing.Color.FromArgb(156, 189, 232);048. }049. #endregion Constructors050. 051. #region Events052. /// <summary>053. /// 054. /// </summary>055. /// <param name="sender"></param>056. /// <param name="e"></param>057. private void TextBox_KeyDown(object sender, KeyEventArgs e)058. {059. }060. 061. void DropDownMenu_PopupOpening(object sender, CancelEventArgs args)062. {063. //Adding a costumized menu to the spellcheck menu064. (sender as RadItemsPopupControl).Items.Add(new RadMenuSeparatorItem());065. 066. Telerik.WinControls.UI.RadMenuItem radmenuitem = new RadMenuItem() { Name = "rmi_Copy", Text = "Copy" };067. radmenuitem.Click += new EventHandler(con_Copy_Click);068. (sender as RadItemsPopupControl).Items.Add(radmenuitem);069. 070. radmenuitem = new RadMenuItem() { Name = "rmi_Paste", Text = "Paste" };071. radmenuitem.Click += new EventHandler(con_Paste_Click);072. (sender as RadItemsPopupControl).Items.Add(radmenuitem);073. }074. 075. void HostedControl_MouseDown(object sender, MouseEventArgs e)076. {077. if (e.Button == System.Windows.Forms.MouseButtons.Right)078. {079. Telerik.WinControls.UI.TextBoxSpellChecker tbSpellchecker = this.spellchecker.GetControlSpellChecker(typeof(RadTextBox)) as Telerik.WinControls.UI.TextBoxSpellChecker;080. Regex wordParser = new Regex("[\\p{L}\\p{N}\\p{M}]+(?:[-.'´_@][\\p{L}|\\p{N}|\\p{M}]+)*", RegexOptions.Compiled);081. Telerik.WinControls.RichTextBox.Proofing.DocumentSpellChecker checker = tbSpellchecker.SpellChecker as Telerik.WinControls.RichTextBox.Proofing.DocumentSpellChecker;082. bool containsError = false;083. 084. int i = this.SelectionStart;085. foreach (Match word in wordParser.Matches(this.Text + ""))086. {087. if (!checker.CheckWordIsCorrect(word.Captures[0].Value))088. {089. containsError = true;090. break;091. }092. }093. 094. if (!containsError)095. {096. Point p = (sender as Control).PointToScreen(e.Location);097. this.con_CopyAndPaste.Show(p);098. }099. }100. }101. 102. private void con_Paste_Click(object sender, EventArgs e)103. {104. if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Text) == true)105. {106. this.TextBoxElement.TextBoxItem.Paste();107. }108. }109. 110. private void con_Copy_Click(object sender, EventArgs e)111. {112. if (this.TextBoxElement.TextBoxItem.SelectionLength == 0)113. this.TextBoxElement.TextBoxItem.SelectAll();114. this.TextBoxElement.TextBoxItem.Copy();115. }116. 117. private void TextBox_Initialized(object sender, EventArgs e)118. {119. this.TextBoxElement.TextBoxItem.HostedControl.ContextMenuStrip = this.con_CopyAndPaste;120. 121. this.SpellcheckActivation();122. }123. #endregion Events124. 125. #region Methods126. private void SpellcheckActivation()127. {128. if (this.IsSpellcheckAktiv)129. {130. this.spellchecker.AutoSpellCheckControl = this;131. this.TextBoxElement.TextBoxItem.HostedControl.MouseDown += new MouseEventHandler(HostedControl_MouseDown);132. 133. Telerik.WinControls.UI.TextBoxSpellChecker tbs = this.spellchecker.GetControlSpellChecker(typeof(RadTextBox)) as Telerik.WinControls.UI.TextBoxSpellChecker;134. if (tbs != null)135. {136. tbs.DropDownMenu.PopupOpening += new RadPopupOpeningEventHandler(DropDownMenu_PopupOpening);137. }138. }139. }140. #endregion Methods141. }142.}These are the possible szenarios:
1. All typed words are correct:
- right click in the textbox shows a context menu with copy/paste button -> works
2. E.g. one of five words is miss spelled:
- right click on the miss spelled word shows a context menu of the spellchecker + copy/paste button -> works
- right click on a right spelled word shows just the context menu with the copy/paste button -> fails
I hope my explanaition is understandable :-)
Best regards,
Dennis
0
Hello Dennis,
Thank you for writing back.
I have prepared a sample project demonstrating how to cover all of the described scenarios. Please refer to the attached zip file. Additionally, the provided gif file illustrates the implemented functionality.
I hope this information helps. If you have any additional questions, please let me know.
Regards,
Dess
Telerik
Thank you for writing back.
I have prepared a sample project demonstrating how to cover all of the described scenarios. Please refer to the attached zip file. Additionally, the provided gif file illustrates the implemented functionality.
I hope this information helps. If you have any additional questions, please let me know.
Regards,
Dess
Telerik
Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.
