1

您好我正在尝试创建一个类似于 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()。

但只有当我关闭查找(子)窗口时才会搜索文本。

所以我想让子窗口打开,用户使用该窗口搜索文本以获取父窗口中的内容。

4

2 回答 2

0

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

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

例如说Form1是你的主要形式,你给它一个名为的公共财产MyTextArea

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

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

然后,您可以访问主窗体上的控件

mainForm.MyTextArea ....
于 2013-06-02T19:46:09.733 回答
0

使事情静态化很少是处理事情的正确方法。您需要考虑将查找框结果作为一种显示表单并将结果返回给父窗口的方法。

为“FindBox”对话框提供一些公共属性(FindText和/或ReplaceText,例如)来存储用户的输入(您可以在用户单击“确定”按钮时设置它们,例如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"
}
于 2013-06-02T19:54:28.167 回答