我将有关排序算法更改位置的信息保存到数组中。
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色蓝色
index(position = 3,tartgetposition = 4),
23 59 59 12 70 92 19 14 77 51 - > 92<颜色为红色,19色为蓝色
index(position = 5,tartgetposition = 6),
23 59 59 12 70 19 92 14 77 51 - > 92<颜色为红色,14色蓝色
index(position = 6,tartgetposition = 7),
然而,我失败了........
答案 0 :(得分:1)
如果我理解正确,你的问题是如何使用不同颜色的RichTextBox
呈现文本!
为此,您可以为每个TextRange
项使用Array
,并根据项目情况应用画笔颜色(位置 - >红色,TargetPosition - >蓝色,其他 - >黑色),所以对于以下RichTextBox
:
<StackPanel>
<RichTextBox Name="Output">
</RichTextBox>
<Button Content="Next" Click="Next_OnClick"/>
</StackPanel>
您需要在每个下一个按钮上单击:
RichTetex
Sorting
Array
,并根据项目索引创建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;
}
}
}
结果:
等...