public static class Sort
{
#region 设置PanelControl上按钮显示位置
/// <summary>
/// 设置按钮显示位置
/// </summary>
/// <param name="targetPanel">需要调整按钮顺序的Panel</param>
/// <param name="buttonSpace">按钮间隔</param>
public static void SetButtonCenter(ScrollableControl targetPanel, int buttonSpace)
{
int length = 0;
int maxHeight = 0;
List<Control> listBtn = new List<Control>();
System.Windows.Forms.Control.ControlCollection c = targetPanel.Controls;
foreach (Control btn in c)
{
listBtn.Add(btn);
length += btn.Width + buttonSpace;
if (maxHeight < btn.Height)//获取最大高度
{
maxHeight = btn.Height;
}
}
int pnlLength = targetPanel.Width;
if (length > pnlLength) //本身按钮的长度总和大于了panel的长度,不调整
{
return;
}
int startPos = ((pnlLength - length) / 2);
int yPos = 0;
if (maxHeight < targetPanel.Height)
{
yPos = (targetPanel.Height - maxHeight) / 2;//距离panel上边框的距离
}
else
{
yPos = targetPanel.Height / 10;//距离panel上边框的距离
}
int xPos = startPos;
listBtn.Sort(new ButtonSort());
foreach (Control btn in listBtn)
{
btn.Location = new System.Drawing.Point(xPos, yPos);
xPos += btn.Width + buttonSpace;
}
}
#endregion
#region 设置Control上按钮显示位置
/// <summary>
/// 设置按钮显示位置
/// </summary>
/// <param name="container">需要调整按钮顺序的容器控件</param>
/// <param name="buttonSpace">按钮间隔</param>
public static void SetButtonCenter(Control container, int buttonSpace)
{
int length = 0;
int maxHeight = 0;
List<Control> listControl = new List<Control>();
System.Windows.Forms.Control.ControlCollection c = container.Controls;
foreach (Control btn in c)
{
listControl.Add(btn);
length += btn.Width + buttonSpace;
if (maxHeight < btn.Height)//获取最大高度
{
maxHeight = btn.Height;
}
}
int pnlLength = container.Width;
if (length > pnlLength) //本身按钮的长度总和大于了panel的长度,不调整
{
return;
}
int startPos = ((pnlLength - length) / 2);
int yPos = 0;
if (maxHeight < container.Height)
{
yPos = (container.Height - maxHeight) / 2;//距离panel上边框的距离
}
else
{
yPos = container.Height / 10;//距离panel上边框的距离
}
int xPos = startPos;
listControl.Sort(new ButtonSort());
foreach (Control btn in listControl)
{
btn.Location = new System.Drawing.Point(xPos, yPos);
xPos += btn.Width + buttonSpace;
}
}
#endregion
} public class ButtonSort : IComparer<Control>
{
#region IComparer<Button> Members
//IComparer<T> 接口:定义类型为比较两个对象而实现的方法。
public int Compare(Control x, Control y)
{
if (x.TabIndex >= y.TabIndex)
{
return 1;
}
else
{
return -1;
}
}
#endregion
}sort类完善版本(修正传入控件集合大小不一致,排序后文本显示问题)
public static class Sort
{
#region 设置PanelControl上按钮显示位置
/// <summary>
/// 设置按钮显示位置
/// </summary>
/// <param name="targetPanel">需要调整按钮顺序的Panel</param>
/// <param name="buttonSpace">按钮间隔</param>
public static void SetButtonCenter(ScrollableControl targetPanel, int buttonSpace)
{
int length = 0;
int maxHeight = 0;
bool controlsHeightSame = true;//控件高度是否一致
List<Control> lisControl = new List<Control>();
System.Windows.Forms.Control.ControlCollection controls = targetPanel.Controls;
foreach (Control btn in controls)
{
lisControl.Add(btn);
length += btn.Width + buttonSpace;
if (maxHeight < btn.Height)//获取最大高度
{
maxHeight = btn.Height;
}
}
//判断控件高度是否一致
//lisControl.ForEach(delegate(Control control)
//{
// if (control.Height != maxHeight)
// {
// controlsHeightSame = false;
// }
//});
lisControl.ForEach(control =>
{
if (control.Height != maxHeight)
{
controlsHeightSame = false;
}
});
int pnlLength = targetPanel.Width;
if (length > pnlLength) //本身按钮的长度总和大于了panel的长度,不调整
{
return;
}
int startPos = ((pnlLength - length) / 2);
int yPos = 0;
int xPos = startPos;
lisControl.Sort(new ButtonSort());
//控件绘制的起点是左上角的顶点,yPos即控件的左上角顶点的y坐标
if (controlsHeightSame)//控件高度一致
{
if (maxHeight < targetPanel.Height)
{
yPos = (targetPanel.Height - maxHeight) / 2;//距离panel上边框的距离
}
else
{
yPos = targetPanel.Height / 10;//距离panel上边框的距离
}
foreach (Control btn in lisControl)
{
btn.Location = new System.Drawing.Point(xPos, yPos);
xPos += btn.Width + buttonSpace;
}
}
else//控件大小不一致,每个控件的yPos单独计算
{
foreach (Control btn in lisControl)
{
yPos = (targetPanel.Height - btn.Height) / 2;//距离panel上边框的距离
btn.Location = new System.Drawing.Point(xPos, yPos);
xPos += btn.Width + buttonSpace;
}
}
}
#endregion
#region 设置Control上按钮显示位置
/// <summary>
/// 设置按钮显示位置
/// </summary>
/// <param name="container">需要调整按钮顺序的容器控件</param>
/// <param name="buttonSpace">按钮间隔</param>
public static void SetButtonCenter(Control container, int buttonSpace)
{
int length = 0;
int maxHeight = 0;
bool controlsHeightSame = true;//控件高度是否一致
List<Control> listControl = new List<Control>();
System.Windows.Forms.Control.ControlCollection c = container.Controls;
foreach (Control btn in c)
{
listControl.Add(btn);
length += btn.Width + buttonSpace;
if (maxHeight < btn.Height)//获取最大高度
{
maxHeight = btn.Height;
}
}
//判断控件高度是否一致
//listControl.ForEach(delegate(Control control)
//{
// if (control.Height != maxHeight)
// {
// controlsHeightSame = false;
// }
//});
listControl.ForEach(control =>
{
if (control.Height != maxHeight)
{
controlsHeightSame = false;
}
});
int pnlLength = container.Width;
if (length > pnlLength) //本身按钮的长度总和大于了panel的长度,不调整
{
return;
}
int startPos = ((pnlLength - length) / 2);
int yPos = 0;
int xPos = startPos;
listControl.Sort(new ButtonSort());
//控件绘制的起点是左上角的顶点,yPos即控件的左上角顶点的y坐标
if (controlsHeightSame)//控件高度一致
{
if (maxHeight < container.Height)
{
yPos = (container.Height - maxHeight) / 2;//距离panel上边框的距离
}
else
{
yPos = container.Height / 10;//距离panel上边框的距离
}
foreach (Control btn in listControl)
{
btn.Location = new System.Drawing.Point(xPos, yPos);
xPos += btn.Width + buttonSpace;
}
}
else//控件大小不一致,每个控件的yPos单独计算
{
foreach (Control btn in listControl)
{
yPos = (container.Height - btn.Height) / 2;//距离panel上边框的距离
btn.Location = new System.Drawing.Point(xPos, yPos);
xPos += btn.Width + buttonSpace;
}
}
}
#endregion
} 以上就是C# 容器上控件排序的内容,更多相关内容请关注PHP中文网(www.php.cn)!
现代化家居响应式网站模板源码是以cmseasy进行开发的家居网站模板。该软件可免费使用,模板附带测试数据!模板源码特点:整体采用浅色宽屏设计,简洁大气,电脑手机自适应布局,大方美观,功能齐全,值得推荐的一款模板,每个页面精心设计,美观大方,兼容各大浏览器;所有代码经过SEO优化,使网站更利于搜索引擎排名,是您做环保类网站的明确选择。无论是在电脑、平板、手机上都可以访问到排版合适的网站,即便是微信等
0
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号