类似于记事本的方法“查找”,您可以在其中找到某个单词,主表单将突出显示该单词,同时保持“查找”对话框的聚焦。
到目前为止我在这里:
[Main.cs](Windows窗体)
private new Find FindForm;
private delegate void FindNextCallback(int s, int l);
private cmdFind_Click(object sender, EventArgs e)
{
FindForm = new Find(txtInput.Text);
FindForm.FindNext += new FindEventHandler(FoundNext);
FindForm.Show();
}
private void FoundNext(object sender, FindEventArgs e)
{
Invoke(new FindNextCallback(SelectFoundText), new object[] { e.Start, e.Length });
}
private void SelectFoundText(int s, int l) { txtInput.Select(s, l); }
[Find.cs](Windows窗体)
private static FindEventArgs FindArgs;
public event FindEventHandler FindNext;
private void cmdFindNext_Click(object sender, EventArgs e)
{
FindArgs = new FindEventArgs(startingPosition, selectionLength);
FindNext?.Invoke(null, FindArgs);
}
我的问题是,每当用户点击“查找下一个”时,在我实际关闭查找表单或手动Main.Focus()之前,主表单不会执行任何操作。
此外,创建我自己的事件相当新,所以任何关于正确方法,更清晰的方法,更短的编写代码的方法的提示都将非常受欢迎。
答案 0 :(得分:2)
父表单中的TextBox
正在更新,但它未将所选文本显示为突出显示,您可以将文本框的HideSelection
属性设置为false
,以使其显示所选文本总是突出显示,即使控件没有焦点。
您可以使用此属性在文本框中突出显示文本 控制而另一个窗体或对话框具有焦点,例如a 拼写检查对话框。