我正在尝试重构此代码,因为它在我的程序 中反复出现,令人作呕。
我的问题与在任何给定页面(标签页、面板、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;
}