2015-08-18 2 views
1

Я сохраняю информацию о расположении алгоритма сортировки в массив.WPF, текст выделения richtextbox

if (sorting[j] > sorting[j + 1]) 
{ 
     Swap(sorting, j, j + 1); 

     SortingTraceInfo sortInfo = new SortingTraceInfo(); // struct Variable 
     sortInfo.Position = j; // change position save 
     sortInfo.TargetPosition = j + 1; // changed position save 
     sortInfo.SortingNumbers = sorting.ToArray(); // 
     sortingInfos.Add(sortInfo);  
} 

Я знаю индекс измененной позиции. И он выводит результат richtextbox.

Он применил индекс (sortInfo.position), который был сохранен в результате (в richtextbox).

результат в richtextbox. Он применяется к индексу. В результате я хочу

Вывод одной строки и изменение цвета каждый раз, когда вы нажимаете кнопку.

23 59 59 70 12 92 19 14 77 51 -> 70 < красного цвета, 12 синего цвета

индекса (позиция = 3, tartgetposition = 4),

23 59 59 12 70 92 19 14 77 51 -> 92 < цвета красного, 19 синего цвета

индекса (позиция = 5, tartgetposition = 6),

23 59 59 12 70 19 92 14 77 51 -> 92 < красного цвета, 14 цвет синий

индекс (позиция = 6, tartgetposition = 7),

Однако мне не удалось ........

ответ

1

Если я правильно вас понял, ваша проблема заключается в том, чтобы сделать тексты в RichTextBox с разными цветами! Для этого вы можете использовать TextRange для каждого Array элемента и применить цвет кисти на основе ситуации пункт (Position -> Красный, TargetPosition -> синий, другие -> черный), так и для следующих RichTextBox:

<StackPanel> 
    <RichTextBox Name="Output"> 
    </RichTextBox> 
    <Button Content="Next" Click="Next_OnClick"/> 
</StackPanel> 

вам нужно на каждый следующий в Button Click:

  • Сбросьте Выходной RichTetex
  • Итерация через SortingArray и создать TextRang на основе него Индекс ет
  • Операция перерыва цикл должен выполняться каждый раз, когда операция замены произошло, чтобы правильно визуализировать выходной сигнал

    public struct SortingTraceInfo 
    { 
        public int Position; 
        public int TargetPosition; 
        public int[] SortingNumbers; 
    } 
    
    public int[] Sorting = new[] { 23, 59, 59, 70, 12, 92, 19, 14, 77, 51 };   
    public List<SortingTraceInfo> SortingInfos=new List<SortingTraceInfo>(); 
    
    private void Next_OnClick(object sender, RoutedEventArgs e) 
    {    
        Output.Document.Blocks.Clear(); 
        for (int j = 0; j < Sorting.Count()-1; j++) 
        { 
         if (Sorting[j] > Sorting[j + 1]) 
         {     
          //render to RTB 
          for (int i = 0; i < Sorting.Count(); i++) 
          { 
           if (i==j) 
           { 
            //render the number red 
            var textRange = new TextRange(Output.Document.ContentEnd, Output.Document.ContentEnd); 
            textRange.Text = Sorting[i] + " "; 
            textRange.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Red);        
           } 
           else if(i==j+1) 
           { 
            //render the number blue 
            var textRange = new TextRange(Output.Document.ContentEnd, Output.Document.ContentEnd); 
            textRange.Text = Sorting[i]+ " "; 
            textRange.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Blue); 
    
           } 
           else 
           { 
            //render the number black 
            var textRange = new TextRange(Output.Document.ContentEnd, Output.Document.ContentEnd); 
            textRange.Text = Sorting[i] + " "; 
            textRange.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Black);        
           } 
          } 
    
    
          //Swap(Sorting, j, j + 1); 
          int tmp=Sorting[j]; 
          Sorting[j] = Sorting[j+1]; 
          Sorting[j + 1] = tmp; 
    
          var sortInfo = new SortingTraceInfo(); // struct Variable 
          sortInfo.Position = j; // change position save 
          sortInfo.TargetPosition = j + 1; // changed position save 
          sortInfo.SortingNumbers = Sorting.ToArray(); // 
          SortingInfos.Add(sortInfo); 
    
          //handle one sorting operation one at a time 
          break; 
         }    
        }   
    } 
    

результат:

enter image description here

enter image description here

и т. Д.

+0

Спасибо. Я пробую этот код! –

Смежные вопросы