如何使用子窗口在父窗口中搜索文本框内容?

时间:2013-06-02 19:36:46

标签: c# winforms

您好我正在尝试创建类似于Windows记事本的记事本。 我陷入了一种情况,我想在查找框中找到搜索到的文本(就像我们在记事本中一样),并在父窗口中显示所选文本,其中包含一个包含所有文本的文本框。

我尝试使方法静态以访问父窗口中的搜索文本。 这是代码:

 namespace NotePadApp
 {
public partial class Find : Form
{

    static string SearchText="";
    static Find Findbox;

 static Find Findbox;


    public static string GetSearchText()
    {
        Findbox = new Find();
        Findbox.ShowDialog();
        return SearchText;

    }

  }}

我可以访问静态方法GetSearchText()。

但仅当我关闭查找文本的查找(子)窗口时。

所以我想打开子窗口,用户在父窗口中使用该窗口搜索文本。

2 个答案:

答案 0 :(得分:0)

如果您只是想要读取或写入控件,或者如果您需要执行其他操作,请将主窗口中的内容控件(文本框或其他内容)包装在公共属性中。您可以在主窗体上使用公共方法,例如将搜索条件作为参数。

您可以使用查找表单中的Application.OpenForms访问主表单。

比如说Form1是你的主要表单,你给它一个名为MyTextArea的公共属性

在您的查找表单上,您可以执行此操作

var mainForm = (Form1)Application.OpenForms["Form1"];

然后,您可以使用

访问主表单上的控件
mainForm.MyTextArea ....

答案 1 :(得分:0)

让事情变得静止很少是正确的事情。您需要考虑获取查找框结果作为显示表单的方法并将结果返回到父窗口。

为“FindBox”对话框提供一些公共属性(例如FindText和/或ReplaceText)来存储用户的输入(您可以在用户单击“Ok”时设置它们“按钮,如FindText = findTextBox.Text),并编写父表单可以访问的方法:

DialogResult FindTextInEditor(out string findText)
{
    // instantiate the FindForm and display it with .ShowDialog()
    var findForm = new FindBox();
    var result = findForm.ShowDialog();

    // set the out parameter using the public properties of the FindBox:
    findText = findForm.FindText;

    // if the user cancelled out the caller needs to know:
    return result;
}

父/主窗体只需要调用此方法来显示“查找框”并返回结果 - 看起来像这样:

string findText;
var result = FindTextInEditor(out findText);

if (result != DialogResult.Cancel)
{
    // search the text editor content for "findText"
}