我试图重构此代码,因为它是重复的广告nauseum贯穿我的程序。帮助找到最深的儿童控制拼写检查
我的问题有一个事实,即任何给定的网页上(标签页,面板,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;
}
只要我不再需要两个级别以上,这会工作正确吗?如果我在'if(control.HasChildren())'中包装'foreach循环',那么它会更有效率?没有? – 2009-10-01 13:49:14
这将适用于任何你想要的级别(事实上,只要有'小孩',这个功能会下降一步来检查拼写他们和他们的孩子等)。如果(control.HasChildren())更好,则添加。我还将添加一个深度级别来告诉函数停止在。 – manji 2009-10-01 13:56:13