如何从Child对话框更新Parent表单?

时间:2016-04-17 17:02:59

标签: c# winforms events dialog

类似于记事本的方法“查找”,您可以在其中找到某个单词,主表单将突出显示该单词,同时保持“查找”对话框的聚焦。

到目前为止我在这里:

[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()之前,主表单不会执行任何操作。

此外,创建我自己的事件相当新,所以任何关于正确方法,更清晰的方法,更短的编写代码的方法的提示都将非常受欢迎。

1 个答案:

答案 0 :(得分:2)

父表单中的TextBox正在更新,但它未将所选文本显示为突出显示,您可以将文本框的HideSelection属性设置为false,以使其显示所选文本总是突出显示,即使控件没有焦点。

  

您可以使用此属性在文本框中突出显示文本   控制而另一个窗体或对话框具有焦点,例如a   拼写检查对话框。