Я пытаюсь изменить этот код, поскольку он повторяется ad nauseum во всей моей программе.
Моя проблема связана с тем, что на любой странице ( tabpage, panel, uc и т. Д. ) есть элементы управления на нескольких уровнях для проверки орфографии .
т.е. ->
foreach (Control control in tpgSystems.Controls)
{
if (control.GetType() == typeof(MemoExEdit))
{
if (control.Text != String.Empty)
{
control.BackColor = Color.FromArgb(180, 215, 195);
control.Text = HUD.Spelling.CheckSpelling(control.Text);
control.ResetBackColor();
}
}
}
foreach (Control control in grpCogestiveHeartFailure.Controls)
{
if (control.GetType() == typeof(MemoExEdit))
{
if (control.Text != String.Empty)
{
control.BackColor = Color.FromArgb(180, 215, 195);
control.Text = HUD.Spelling.CheckSpelling(control.Text);
control.ResetBackColor();
}
}
}
foreach (Control control in grpDiabetes.Controls)
{
if (control.GetType() == typeof(MemoExEdit))
{
if (control.Text != String.Empty)
{
control.BackColor = Color.FromArgb(180, 215, 195);
control.Text = HUD.Spelling.CheckSpelling(control.Text);
control.ResetBackColor();
}
}
}
Как вы можете видеть в примере, tpgSystems
имеет некоторые элементы управления непосредственно на нем, а затем есть два Group Boxes
, которые также содержат элементы управления.
Часть моей цели в этом заключалась в том, чтобы проверять только те элементы управления, которые могли нуждаться в Проверка орфографии , как в Text Boxes
и их родственниках.
Я знаю, что есть control.HasChildren()
, который я могу использовать, но что ускользает от меня, это как использовать это и сказать, как глубоко идти. Я бы предположил, что два уровня - это самый глубокий из всех, что я когда-либо мог бы пройти, но это кажется недальновидным для жесткого кода, который в.
В идеале я бы придумал, как передать управление моему CheckSpelling()
, а затем использовал бы логику, чтобы выяснить, как далеко идти. Возможно использование Отражение .
Для полноты здесь CheckSpelling()
находится в отдельной библиотеке, которую я создал.
public string CheckSpelling(string text)
{
Word.Application app = new Word.Application();
object nullobj = Missing.Value;
object template = Missing.Value;
object newTemplate = Missing.Value;
object documentType = Missing.Value;
object visible = false;
object optional = Missing.Value;
object savechanges = false;
app.ShowMe();
Word._Document doc = app.Documents.Add(ref template, ref newTemplate, ref documentType, ref visible);
doc.Words.First.InsertBefore(text);
Word.ProofreadingErrors errors = doc.SpellingErrors;
var ecount = errors.Count;
doc.CheckSpelling(ref optional, ref optional, ref optional, ref optional,
ref optional, ref optional, ref optional, ref optional, ref optional,
ref optional, ref optional, ref optional);
object first = 0;
object last = doc.Characters.Count - 1;
var results = doc.Range(ref first, ref last).Text;
doc.Close(ref savechanges, ref nullobj, ref nullobj);
app.Quit(ref savechanges, ref nullobj, ref nullobj);
return results;
}