C#在屏幕上按位置排列标签列表
如何按标签在屏幕上的位置排列标签列表? 我的标签在屏幕上移动,但只在X轴上移动,这是我的代码,但我注意到它不起作用C#在屏幕上按位置排列标签列表,c#,winforms,list,location,C#,Winforms,List,Location,如何按标签在屏幕上的位置排列标签列表? 我的标签在屏幕上移动,但只在X轴上移动,这是我的代码,但我注意到它不起作用 labels.OrderBy(x => x.Location.X); 提前谢谢你 编辑:这就是我测试它是否有效的方式 private void actualizarPosicoes() { labels.OrderBy(x => x.Location.X); MessageBox.Show(labels.First.Value.
labels.OrderBy(x => x.Location.X);
提前谢谢你
编辑:这就是我测试它是否有效的方式
private void actualizarPosicoes() {
labels.OrderBy(x => x.Location.X);
MessageBox.Show(labels.First.Value.Text.ToString());
}
但是我想在标签从屏幕上移除时使用它,但首先我必须通过工作来进行排序
private void reorder(Label lb) {
labels.OrderBy(x => x.Location.X);
var it = labels.GetEnumerator();
var node = it.Current;
while (it.MoveNext())
{
var nextNode = it.MoveNext();
if (nextNode != null)
{
if (nextNode.Equals(lb))
{
nextNode = it.MoveNext();
it.Current.Location = new Point(node.Right, 0);
}
}
node = it.Current;
}
}
我有一个名为标签的全局链接列表:
private LinkedList<Label> labels;
私有链接列表标签;
我建议您将其用作标签的容器。删除任何标签将自动重新排列其他标签
以下是示例-假设您有LabelFlowLayoutPanel
来承载标签,并有addLabelButton
来添加标签:
private void addLabelButton_Click(object sender, EventArgs e)
{
Label label = new Label();
label.Text = DateTime.Now.ToLongTimeString();
label.DoubleClick += label_DoubleClick;
labelsFlowLayoutPanel.Controls.Add(label);
}
void label_DoubleClick(object sender, EventArgs e)
{
Label label = (Label)sender;
labelsFlowLayoutPanel.Controls.Remove(label);
label.DoubleClick -= label_DoubleClick;
}
每次单击addLabelButton
都会创建新标签并将其插入到其他标签的右侧。双击任何标签都会将其删除并重新排列其他标签
进一步信息-不提供任何关于更好方法的建议,为了直接回答问题,代码的问题如下: 调用不修改实例的
OrderBy
方法时,它将返回一个新的iorderenumerable
,其中TSource
是对象的类型,例如Label
。这意味着您的代码应该如下所示:
labels = labels.OrderBy(x => x.Location.X);
根据对象标签
的类型,您可能需要将其转换为列表
,如下所示:
labels = labels.OrderBy(x => x.Location.X).ToList();
编辑:我刚刚意识到您正在使用
链接列表
,我建议将其更改为私有列表标签代码>我终于做到了!
如果有人需要它,答案是存在的
private void reorder() {
var it2 = labels.OrderBy(x => x.Location.X);
Label orderLb = it2.ElementAt(0);
for (int i = 1; i < labels.Count; i++)
{
it2.ElementAt(i).Location = new Point(orderLb.Right, 0);
orderLb = it2.ElementAt(i);
}
private void reorder(){
var it2=labels.OrderBy(x=>x.Location.x);
标签顺序lb=it2.ElementAt(0);
对于(int i=1;i
谢谢大家的帮助,非常感谢!你怎么知道它不起作用?它的哪一部分不起作用?它们都有相同的父控件?还是属于不同的控件?在排序之前,你是如何获得初始列表的?请发布更多的代码,不要再继续了。我唯一能猜到的是t是您需要重新分配标签的值,即标签=标签.OrderBy(x=>x.Location.x)的结果
但在提供更多上下文之前,这只是一个猜测。它返回带有有序列表的新枚举,您想做什么?@JoãoSilva您正在尝试对齐一行中的所有标签,中间没有空格?我以前有FlowLayoutPanel,但它不能按需要工作,因此我必须创建自己的自定义面板。。。