[英]Ordering Controls inside FlowLayoutpanel
我有一个Windows.Forms.FlowLayoutPanel
,在运行时将填充MasterMeter
类型的控件(以及从MasterMeter继承的控件)。 这是您的标准Usercontrol
。 每个控件都有一个属性ErrorTime
。 此值保留当前错误或警报的持续时间。
Datetime? ErrorTime {get; set;}
我目前正在尝试根据错误的持续时间(降序)使用bubblesort-method
对控件进行bubblesort-method
。 现在,我想知道是否有更快/更高效/更可靠的方式来做到这一点?
如果没有,我可以使用另一个容器吗? 它需要具有以下特征:
当前代码(不会排序)
我正在使用一维数组来保持简单(实际上是锯齿状数组)。 注意: NULL
值的可能性
MasterMeter[] meterList = {new MasterMeter() { ErrorTime = null },
new MasterMeter() { ErrorTime = DateTime.Now },
new MasterMeter() { ErrorTime = DateTime.Now.AddDays(-10) },
new MasterMeter() { ErrorTime = DateTime.Now.AddDays(37) },
new MasterMeter() { ErrorTime = DateTime.Now.AddDays(53) },
new MasterMeter() { ErrorTime = DateTime.Now.AddDays(3) },
new MasterMeter() { ErrorTime = null },
new MasterMeter() { ErrorTime = DateTime.Now.AddDays(-17) },
new MasterMeter() { ErrorTime = DateTime.Now.AddDays(-10) },
new MasterMeter() { ErrorTime = null }
};
我正在按如下方式进行Bubblesorting
:
for (int outer = 0; outer < meterList.Count(); outer++)
{
for (int inner = 0; inner < (meterList.Count() - 1); inner++)
{
if (meterList[inner].ErrorTime > meterList[inner + 1].ErrorTime)
{
var temp = meterList[inner + 1];
meterList[inner + 1] = meterList[inner];
meterList[inner] = temp;
}
}
}
我的输出结果(使用Console.Writeline
):
foreach (MasterMeter meterlist in meterList)
{
Console.WriteLine(meterlist.ErrorTime);
}
Console.ReadLine();
但是我的数组仍然没有排序。 这是怎么了?
您必须决定如何处理列表中的这些空值,因为它会干扰气泡排序:
if (!meterList[inner].ErrorTime.HasValue ||
meterList[inner].ErrorTime > meterList[inner + 1].ErrorTime) {
至于在FlowLayoutPanel中对控件进行重新排序,您的帖子中缺少该代码,但是通常,您将使用FlowLayoutPanel.Controls.SetChildIndex
方法对控件进行重新排序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.