【发布时间】:2020-08-21 09:06:23
【问题描述】:
我有两个 WPF 窗口。
- MainWindow,其中包含一个名为 page1 的 RichTextBox 和一个名为 btnFindReplace 的按钮,用于打开 FindReplace 窗口。
- FindReplace 窗口,带有两个 TextBoxes 和一个名为 btnConfirm 的按钮。
第一个文本框被称为“txtBoxFind”
第二个叫做“txtBoxReplaceWith”
/
/
/
我有几个问题:
- 当调用 btnConfirm Click 事件时,新的 MainWindow 实例打开。怎么会?
- 正则表达式匹配总是错误的 - 是因为打开了一个新实例并且它匹配 txtBoxFind.Text 和 no text,因为 page1 的文本 在新实例中是 空 吗?如果是这样,如何解决?如果不是,为什么总是假的?
/
/
/
MainWindow.xaml.cs
btnFindReplace 点击事件
private void FindReplace(object sender, RoutedEventArgs e)
{
FindReplace findReplaceWindow = new FindReplace();
findReplaceWindow.Show();
}
FindReplace.xaml.cs
btnConfirm 点击事件
private void FindOrReplace(object sender, RoutedEventArgs e)
{
MainWindow windowMain = new MainWindow();
TextRange textRange = new TextRange(windowMain.page1.Document.ContentStart, windowMain.page1.Document.ContentEnd);
switch (((Button)sender).Content)
{
case "Find":
//Regex.Match(textRange.Text, @"\b" + txtBoxReplaceWith.Text + @"\b");
if (Regex.IsMatch(textRange.Text, @"\b" + txtBoxFind.Text + @"\b"))
{
MessageBox.Show("found");
}
else
{
MessageBox.Show("not found");
}
break;
case "Replace":
//textRange.Text.Replace(txtBoxFind.Text, txtBoxReplace.Text);
break;
}
}
【问题讨论】:
-
创建一个新的 MainWindow 显然是错误的。你为什么这样做?您应该在显示之前将文本从当前 MainWindow 传递到 FindReplace 窗口。
-
我是第一次这样做。我创建了一个新的 MainWindow 来访问“page1”富文本框。如何在不创建新 MainWindow 的情况下访问 page1?
-
如前所述,通过 在显示之前将文本从当前 MainWindow 传递到 FindReplace 窗口,例如作为构造函数参数:
new FindReplace(new TextRange(page1.Document.ContentStart, page1.Document.ContentEnd));