Я думаю, вы можете быть смущены тем, как вы ссылаетесь Form1
и Form2
друг на друга.
Вызов new Form()
и new Form2()
создает ссылки на новые экземпляры Form1
и Form2
, они не ссылаются на уже открытые формы. Вам необходимо получить ссылки для существующих экземпляров.
Предполагая, что Form1
является основной формой для вашего приложения, и она создает и показывает Form2
, вы можете либо добавить свойство к Form2
, которое представляет экземпляр Form1
, который его создал, либо вы можете присвоить Owner
свойство для этой цели (я бы рекомендовал это).
В вашем коде на Form1
, который изначально показывает Form2
(не в том коде, который у вас есть выше), наберите frm2.Show(this)
вместо frm2.Show()
. Это установит свойство Owner
вашего экземпляра Form2
равным тонкости Form1
, открывшей его.
Затем измените код кнопки для Form2
на этот:
private void button1_Click(object sender, EventArgs e)
{
Form1 frm1 = (Form1)Owner;
frm1.FindNext();
}
Это заставит вас ссылаться на существующую форму, а не на новую, что вам и нужно.
Что касается функции FindNext
, у вас есть два варианта: либо вы можете удерживать ссылку на Form2
(хотя вы, вероятно, все равно хотите это сделать) и получать доступ к тексту напрямую, либо вы можете изменить FindNext
взять строку (это то, что я бы порекомендовал).
public void FindNext(string searchText)
{
try
{
this.Focus();
richTextBox1.Focus();
findPos = richTextBox1.Find(searchText, findPos, RichTextBoxFinds.None);
richTextBox1.Select(findPos + 1, searchText.Length);
findPos += searchText.Length;
}
catch
{
MessageBox.Show("No Occurences Found");
findPos = 0;
}
}
Затем измените вызов на frm1.FindNext()
на Form2
на frm1.FindNext(textBox1.Text)
:
private void button1_Click(object sender, EventArgs e)
{
Form1 frm1 = (Form1)Owner;
frm1.FindNext(textBox1.Text);
}