Я не владею C #, и я также новичок в этом форуме.Тем не менее, мне кажется, что если бы вы добавили код, опубликованный функцией rene, с помощью функции, которая запрашивает вашу таблицу перевода и возвращает текст перевода, то вы бы получили это (простите мою психодокодную бойню - я очень свободно говорю на vb.net, скоро изучу синтаксис C #):
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 a a 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;
}
Затем измените последнюю часть кода Рене ("// Показать результат") следующим образом (подходящая поправка для моегоУжасная проблема 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);
}
Если бы это было полезно, я мог бы довольно быстро уничтожить код vb.net, но я не собирался этого делать, если это не будет полезно.
Надеюсь, это полезно.Мне придется немного поработать над изучением C # и улучшением моего понимания публикации на этом форуме!Получение правильного кода - это вызов.,.