Преглед изворни кода

增加了日志的搜索功能

djs пре 3 месеци
родитељ
комит
7655daa6c1

+ 3 - 0
MeterVision/Dlg/LogViewerWindow.xaml

@@ -54,6 +54,7 @@
                 <Border Grid.Column="2" BorderBrush="#D3D3D3" BorderThickness="1" Margin="6 6 10 10">
                     <Grid>
                         <Grid.RowDefinitions>
+                            
                             <RowDefinition Height="*" />
                             <RowDefinition Height="Auto" />
                         </Grid.RowDefinitions>
@@ -66,6 +67,8 @@
                                  Margin="10 6 10 10"/>
                         </Border>
                         <StackPanel x:Name="pnlImageCtl" Grid.Row="1" Orientation="Horizontal" Background="#666666" Margin="5" HorizontalAlignment="Center">
+                            <TextBox x:Name="txtSearchBox" Width="150" Height="30" Margin="10 5 10 5" FontSize="14" VerticalContentAlignment="Center"  />
+                            <Button Content="🔍" FontSize="16px" Width="30" Height="30" Click="SearchButton_Click" Margin="0 5 20 5" Padding="0" Foreground="White" Background="#333333" />
                             <Button Content="↑" FontSize="20px" Width="30" Height="30" Click="LogScrollTop_Click" Margin="20 5 20 5" Padding="0" Foreground="White" Background="#333333" />
                             <Button Content="↓" FontSize="20px" Width="30" Height="30" Click="LogScrollBottom_Click" Margin="0 5 20 5" Padding="0" Foreground="White" Background="#333333" />
                             <Button Content="📥" FontSize="20px" Width="30" Height="30" Click="AiLogSave_Click" Margin="0 5 20 5" Padding="0" Foreground="White" Background="#333333" />

+ 49 - 0
MeterVision/Dlg/LogViewerWindow.xaml.cs

@@ -230,6 +230,55 @@ namespace MeterVision.Dlg
                 ThisApp.ExportAiLog(logPath);
             }
         }
+
+        private TextPointer lastSearchPosition = null;
+
+        private void SearchButton_Click(object sender, RoutedEventArgs e)
+        {
+            string searchText = txtSearchBox.Text;
+            if (string.IsNullOrEmpty(searchText))
+                return;
+
+            TextRange documentRange = new TextRange(RichTxtContentBox.Document.ContentStart, RichTxtContentBox.Document.ContentEnd);
+            documentRange.ApplyPropertyValue(TextElement.BackgroundProperty, Brushes.Transparent); // 清除旧高亮
+
+            TextPointer searchStart = lastSearchPosition ?? RichTxtContentBox.Document.ContentStart;
+
+            TextRange foundRange = FindTextInRichTextBox(searchStart, searchText);
+
+            if (foundRange != null)
+            {
+                foundRange.ApplyPropertyValue(TextElement.BackgroundProperty, Brushes.Yellow);
+                RichTxtContentBox.Selection.Select(foundRange.Start, foundRange.End);
+                RichTxtContentBox.Focus();
+                lastSearchPosition = foundRange.End;
+            }
+            else
+            {
+                MessageBox.Show("未找到更多内容", "搜索", MessageBoxButton.OK, MessageBoxImage.Information);
+                lastSearchPosition = null; // 重置
+            }
+        }
+
+        private TextRange FindTextInRichTextBox(TextPointer start, string searchText)
+        {
+            while (start != null && start.CompareTo(RichTxtContentBox.Document.ContentEnd) < 0)
+            {
+                if (start.GetPointerContext(LogicalDirection.Forward) == TextPointerContext.Text)
+                {
+                    string textRun = start.GetTextInRun(LogicalDirection.Forward);
+                    int index = textRun.IndexOf(searchText, StringComparison.OrdinalIgnoreCase);
+                    if (index >= 0)
+                    {
+                        TextPointer startPos = start.GetPositionAtOffset(index);
+                        TextPointer endPos = startPos?.GetPositionAtOffset(searchText.Length);
+                        return new TextRange(startPos, endPos);
+                    }
+                }
+                start = start.GetNextContextPosition(LogicalDirection.Forward);
+            }
+            return null;
+        }
         //--------------------------------
     }
 }

+ 2 - 2
MeterVision/Properties/AssemblyInfo.cs

@@ -51,5 +51,5 @@ using System.Windows;
 // 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
 // 方法是按如下所示使用“*”: :
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("3.3.1.5")]
-[assembly: AssemblyFileVersion("3.3.1.5")]
+[assembly: AssemblyVersion("3.3.1.6")]
+[assembly: AssemblyFileVersion("3.3.1.6")]