Additional information for each word in richtextbox- Link between richtextbox and sql table

I have richtextbox that its text is a concatenation of some words from a particular table. (table columns are the word, translation, and id)

I need that when the user hovers over each word, the corresponding translation is displayed in the word’s tooltip. (something like google translate, but in a Windows Form application).

Can someone point me to a solution?

+4
source share
3 answers

using a web browser Managing and implementing JavaScript solves my problem .;)

+1
source

This will do the trick ...

private void richTextBox1_MouseMove(object sender, MouseEventArgs e) { // whitespace definition char[] whitespace = new char[] { ' ', '\r', '\n', '\t' }; int charPosition = this.richTextBox1.GetCharIndexFromPosition(e.Location); string fullText = this.richTextBox1.Text; // if we are on whitespace, exit if (whitespace.Contains(fullText[charPosition])) { return; } // find a whitespace towards the start of the text int firstWhiteSpace = charPosition; while (firstWhiteSpace > 0 && firstWhiteSpace < fullText.Length && !whitespace.Contains(fullText[firstWhiteSpace])) { firstWhiteSpace--; } if (firstWhiteSpace!=0) firstWhiteSpace++; // find the next whitespace int lastWhiteSpace = fullText.IndexOfAny(whitespace, charPosition); if (lastWhiteSpace == -1) lastWhiteSpace = fullText.Length; // substring the word out of the flat text string word = fullText.Substring( firstWhiteSpace, lastWhiteSpace - firstWhiteSpace); // show the result label1.Text = String.Format("pos:{0} fsp:{1}, lsp:{2}, len:{3}, word:{4}", charPosition, firstWhiteSpace, lastWhiteSpace, fullText.Length, word); } 
0
source

I do not own C # and I am also new to this forum. However, it seems to me that if you should supplement the rene code sent by a function that queries your translation table and returns the translation text, you would get this (forgive my fight with pseudo-code - I am very fluent in vb. Net, learn the syntax soon WITH#):

 Private String TranslatedWord(ByVal SelectedWord String) { //Use ADO and SQL to retrieve the Translation(s) associated with the submitted Word // A string SQL Statement (the GROUP ON is in case there are multiple instances of the same word, with different translations (synonyms). THis SQL Should return aa single record for each possible translation of the submitted word (more than one result possible): Dim SQL as String = _ "SELECT tr.ID, tr.Translate " & _ "FROM MyTranslationTable AS tr " & _ "WHERE tr.Word LIKE @Word" //Since I could be ALL DAY struggling to write the C# code for this, I will just step through it in "pseudocode": // 1. Execute the SQL using ADO.Net, set up the @Word Param in your command, and return a sqlDataReader // 2. Iterate through the returned records, and append the Translation results to a System.Text.Stringbuilder object. Delimit each returned value with a semi-colon (or your delimiter of choice). // Return the Stringbuilder.ToString property as the result of this function; 

}

Then change the last part of Rene’s code ("// Show the result") as follows (suitable for my terrible problem with C #!):

  private void richTextBox1_MouseMove(object sender, MouseEventArgs e) { // whitespace definition char[] whitespace = new char[] { ' ', '\r', '\n', '\t' }; int charPosition = this.richTextBox1.GetCharIndexFromPosition(e.Location); string fullText = this.richTextBox1.Text; // if we are on whitespace, exit if (whitespace.Contains(fullText[charPosition])) { return; } // find a whitespace towards the start of the text int firstWhiteSpace = charPosition; while (firstWhiteSpace > 0 && firstWhiteSpace < fullText.Length && !whitespace.Contains(fullText[firstWhiteSpace])) { firstWhiteSpace--; } if (firstWhiteSpace!=0) firstWhiteSpace++; // find the next whitespace int lastWhiteSpace = fullText.IndexOfAny(whitespace, charPosition); if (lastWhiteSpace == -1) lastWhiteSpace = fullText.Length; // substring the word out of the flat text string word = fullText.Substring( firstWhiteSpace, lastWhiteSpace - firstWhiteSpace); // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //My CHanges start here, and will likely require // some tweaking . . . //Use the function I have poorly described above to retreive the //translation(s) for the current Word: string TRANSLATION = TranslatedWord(word); // show the result //Since there are so many minor but important differences between C# and VB, I am not going to attempt //to account for them. Essentially, display the translated word instead of the word over which the mouse is hovering: label1.Text = String.Format("pos:{0} fsp:{1}, lsp:{2}, len:{3}, word:{4}", charPosition, firstWhiteSpace, lastWhiteSpace, fullText.Length, TRANSLATION); } 

If this were useful, I could quickly output the vb.net code for this fast enough, but I was not going to do this if it did not help.

Hope this is helpful. I need to work a bit on learning C # and improve my understanding of posting on this forum! Getting the code to work correctly proves the complexity.,.

0
source

Source: https://habr.com/ru/post/1336338/


All Articles