FlowLayoutPanel内用户控件通过上下移动进行顺序调整
来源:互联网 发布:手机pdf制作软件 编辑:程序博客网 时间:2024/05/22 11:05
我觉得FlowLayoutPanel容器真心是一个很好用的容器,尤其对其里面的控件有位置要求的时候,任意删除其中一个控件,后面的控件会自动上移,这很好的满足了本文所要阐述的需求要点:控制控件的顺序。样图如下:
用户控件源代码:
using System;using System.Windows.Forms;namespace Demo{ public partial class UCBase : UserControl { public UCBase() { InitializeComponent(); this.label1.Text = Guid.NewGuid().ToString(); //该UC标识 } /// <summary> /// 设置上下可见性 /// </summary> /// <param name="up">是否上移</param> /// <param name="v">是否可见</param> public void SetVisible(bool up, bool v) { if (up) { picUp.Visible = v; } else { picDown.Visible = v; } } //声明事件委托 public delegate void OperatorEventHandler(object sender, Operator op); //定义事件 public event OperatorEventHandler OnOperatorClick; public void PicBox_Click(object sender, EventArgs e) { string picName = (sender as PictureBox).Name; switch (picName) { case "picUp": OnOperatorClick(this, Operator.Up); break; case "picDown": OnOperatorClick(this, Operator.Down); break; default: if (MessageBox.Show(string.Format("确定要移除该项吗?"), "警告", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { OnOperatorClick(this, Operator.Remove); } break; } } } /// <summary> /// 操作枚举 /// </summary> public enum Operator { /// <summary> /// 上移 /// </summary> Up, /// <summary> /// 下移 /// </summary> Down, /// <summary> /// 移除 /// </summary> Remove }}
主界面关键代码:
private void btnAdd_Click(object sender, EventArgs e) { UCBase uc = new UCBase(); if (flowLayoutPanel1.Controls.Count == 0)//新添加项作为首项被添加 { uc.SetVisible(true, false);//不可上移 } else //非作为首相被添加 { UCBase ucUp = flowLayoutPanel1.Controls[flowLayoutPanel1.Controls.Count - 1] as UCBase; //获取添加项的上一项 ucUp.SetVisible(false, true); //上一项可下移 } uc.SetVisible(false, false); //新添加项不可下移(新添加项都加到底部,自然不可下移) uc.OnOperatorClick += new UCBase.OperatorEventHandler(uc_OnOperatorClick); uc.Width = 480; //设置宽度 flowLayoutPanel1.Controls.Add(uc); } private void uc_OnOperatorClick(object sender, Operator op) { UCBase uc = sender as UCBase; int oldIndex = flowLayoutPanel1.Controls.IndexOf(uc);//获取操作项的索引值 switch (op) { case Operator.Up: //上移操作,同时要关注上一项的状态变化 if (oldIndex == 1)//若是当前第二项 { uc.SetVisible(true, false);//上移后则变成第一项,自然不可再上移 } uc.SetVisible(false, true);//上移后肯定可以再下移 UCBase ucUp = flowLayoutPanel1.Controls[oldIndex - 1] as UCBase;//获取操作项的上一项 ucUp.SetVisible(true, true);//上一项被下移,则肯定可以再上移 if (oldIndex == flowLayoutPanel1.Controls.Count - 1)//若是当前最后一项 { ucUp.SetVisible(false, false); //上一项下移后则变成最后一项,自然不可再下移 } //上移操作项,这是根本,其他只是对状态进行变化 flowLayoutPanel1.Controls.SetChildIndex(uc, oldIndex - 1); break; case Operator.Down: //下移操作,同时要关注下一项的状态变化 if (oldIndex == flowLayoutPanel1.Controls.Count - 2)//若是当前倒数第二项 { uc.SetVisible(false, false);//下移后则变成最后一项,自然不可再下移 } uc.SetVisible(true, true);//下移后肯定可以再上移 UCBase ucDown = flowLayoutPanel1.Controls[oldIndex + 1] as UCBase;//获取操作项的下一项 ucDown.SetVisible(false, true);//下一项被上移,则肯定可以再下移 if (oldIndex == 0)//若是当前第一项 { ucDown.SetVisible(true, false);//下一项上移后则变成第一项,自然不可再上移 } //下移操作项 flowLayoutPanel1.Controls.SetChildIndex(uc, oldIndex + 1); break; default: //移除操作 if (flowLayoutPanel1.Controls.Count > 1) //项数至少两项的情况同时要关注上下两项的状态变化 { if (oldIndex == flowLayoutPanel1.Controls.Count - 1)//若是最后一项 { ucUp = flowLayoutPanel1.Controls[oldIndex - 1] as UCBase; ucUp.SetVisible(false, false);//上一项变成最后一项,自然不可下移 } else if (oldIndex == 0) //若是第一项 { ucDown = flowLayoutPanel1.Controls[oldIndex + 1] as UCBase; ucDown.SetVisible(true, false);//下一项变成第一项,自然不可上移 } } //移除操作项 flowLayoutPanel1.Controls.Remove(uc); break; } }
2 0
- FlowLayoutPanel内用户控件通过上下移动进行顺序调整
- 对FlowLayoutPanel里面的控件进行排序
- FlowLayoutPanel控件
- FlowLayoutPanel控件
- C#Winform动态调整FlowLayoutPanel的控件中位置
- FlowLayoutPanel控件学习
- 控件FlowLayoutPanel异步使用
- js调整table行的上下顺序
- 被埋没的控件:FlowLayoutPanel
- FlowLayoutPanel控件动态加载radiobutton
- 表格控件新加列后顺序调整
- MFC调整控件tab顺序
- jq进行table动态增删上下移动
- engine中调整Element的上下显示顺序(遮盖)
- engine中调整Element的上下显示顺序(遮盖)
- 一个简单的通过上下左右键移动div的案例--可用于游戏的用户操作界面
- 通过控件移动窗体
- NSSplitView控件上下拖动时窗口自适应调整 样例
- NYOJ 题目5 Binary String Matching
- 闲聊大数据之---大数据之前
- PullToRefresh实现下拉刷新和上拉加载
- SQLite3与SQL差异小结------网上的
- 程序猿必备的Git教程
- FlowLayoutPanel内用户控件通过上下移动进行顺序调整
- 观察arc效果的一段测试代码
- 安美通(APPCON)无线远传水表抄表模块APC240F
- js控制select 下拉菜单
- 自己对manytoone的理解
- Android开发笔记----禁止GridView进行上下滑动
- hihoCoder第八周状态压缩1
- Under the hood: MySQL Pool Scanner (MPS)
- Delphi WebBrowser控件的使用