C # Создать Notepad ++ как окно поиска - PullRequest
3 голосов
/ 14 января 2011

Я пытаюсь сделать окно поиска точно таким же, как в VS или Notepad ++, где оба окна активны (потому что FindBox показан с Show not ShowDialog), и когда вы нажимаете find в FindBox,родитель выполняет поиск.Вот пример:

class MainForm : Form
{
    public void FindNext(string find)
    {
        // Do stuff
    }

    public void OpenFindWindow()
    {
        FindBox find = new FindBox();
        find.customParent = this;
        find.Show();
    }
}

class FindBox : Form
{
    public customParent;

    public void FindButtonPressed()
    {
        ((MainForm)customParent).FindNext(textBox1.text);
    }
}

Но кажется странным, что я должен вручную установить это новое поле «customParent».Какой официальный способ сделать что-то подобное?

Ответы [ 3 ]

2 голосов
/ 14 января 2011

Вы можете принять customParent в качестве аргумента в конструкторе, или, что еще лучше, форма FindBox должна принимать Action<string>, который будет вызываться после нажатия кнопки поиска.

Пример:

class MainForm : Form
{
    public void FindNext(string find)
    {
        // Do stuff
    }

    public void OpenFindWindow()
    {
        FindBox find = new FindBox(this.FindNext);
        find.Show();
    }
}


class FindBox : Form
{
    private Action<string> callback;

    public FindBox(Action<string> callback)
    {
        this.callback = callback;
    }
    public void FindButtonPressed()
    {
        callback(textBox1.text);
    }
}
1 голос
/ 14 января 2011

Вы можете использовать

find.Show(this);

и использовать Owner свойство find для доступа к родительской форме.Конечно, вам придется привести его к MainForm в этом случае:

((MainForm)this.Owner).FindNext(textBox1.Text);

Этот подход также имеет то преимущество, что основная форма не может скрыть поле поиска (собственные формы всегда будут отображаться сверхуих владельцев, даже если у владельца есть центр ...)

1 голос
/ 14 января 2011

Вы можете использовать форму владельца - используйте Показать перегрузку , которая принимает форму владельца.А затем используйте свойство Form.Owner , чтобы получить ссылку на форму владельца.Вы должны привязать форму владельца к конкретному типу формы, создавая тесную связь (но, конечно, вы можете ввести интерфейс, чтобы ослабить это).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...