winform--穿梭框

news/2024/9/20 8:10:24/文章来源:https://www.cnblogs.com/zpy1993-09/p/18316082

新建一个用户控件:

 直接上代码:

  /** 作者:pengyan zhang* 邮箱:3073507793@qq.com* 博客:https://www.cnblogs.com/zpy1993-09* 时间:2024-04-10 16:36*/public partial class ShuttleFrameControl : UserControl{private Color lb_BackColor { get; set; } = Color.Transparent;private Color lb_FonceColor { get; set; } = Color.Black;private Color pic_CheckBackColor { get; set; } = Color.FromArgb(95, 184, 120);private Color pic_UnCheckBackColor { get; set; } = Color.White;private Image pic_Img { get; set; } = Properties.Resources.Check;private List<ShuttleFrameData> InitData=new List<ShuttleFrameData>();public ShuttleFrameControl(){InitializeComponent();Init();}private void Init(){Input_Left.Text = "关键字搜索";Input_Left.ForeColor = Color.DarkGray;Input_Right.Text = "关键字搜索";Input_Right.ForeColor = Color.DarkGray;this.pic_Left.Tag = false;this.pic_Right.Tag = false;this.L_RunLfet.Tag=false;this.L_RunRight.Tag = false;this.Flow_Left_Bottom.AutoScroll = true;this.Flow_Right_Bottom.AutoScroll = true;this.P_Contain.Paint += this_Paint;this.Flow_Left_Bottom.Paint += this_Paint;this.L_RunLfet.Paint += this_Paint;this.L_RunLfet.Click += ShuttleFrame_Click;this.L_RunLfet.MouseEnter += ShuttleFrame_MouseEnter;this.L_RunRight.Paint += this_Paint;this.L_RunRight.Click += ShuttleFrame_Click;this.L_RunRight.MouseEnter += ShuttleFrame_MouseEnter;this.pic_Left.Paint += pic_Paint;this.pic_Left.MouseEnter += ShuttleFrame_MouseEnter;this.pic_Right.Paint += pic_Paint;this.pic_Right.MouseEnter += ShuttleFrame_MouseEnter;this.pic_Left.Click += ShuttleFrame_Click;this.pic_Right.Click += ShuttleFrame_Click;this.L_Left.Click += ShuttleFrame_Click;this.L_Right.Click += ShuttleFrame_Click;this.L_Left.MouseEnter += ShuttleFrame_MouseEnter;this.L_Right.MouseEnter+= ShuttleFrame_MouseEnter;this.panel_Left.Paint += this_Paint;this.panel_Right.Paint += this_Paint;this.Input_Left.Enter += Input_Enter;this.Input_Left.Leave += Input_Leave;this.panel_Flow.Paint += this_Paint;this.Input_Right.Enter += Input_Enter;this.Input_Right.Leave += Input_Leave;ReSet(this.Flow_Right_Bottom,1);ReSet(this.Flow_Left_Bottom,1);}private void Input_Leave(object? sender, EventArgs e){var control = sender as System.Windows.Forms.TextBox;if (control.Text == ""){control.Text = "关键字搜索";control.ForeColor = Color.DarkGray;}}private void Input_Enter(object? sender, EventArgs e){var control = sender as System.Windows.Forms.TextBox;if (control.Text == "关键字搜索"){control.Text = "";control.ForeColor = Color.Black;}}private void ShuttleFrame_MouseEnter(object? sender, EventArgs e){var control = sender as Control;control.Cursor = Cursors.Hand; ;switch (control.Name){case "Itempic":var data = control.Parent.Tag as ShuttleFrameData;if (data.IsShield) control.Cursor = Cursors.No;else if(control is Label) control.BackColor = Color.FromArgb(224, 224, 224);break;case "L_RunLfet":case "L_RunRight":if( (bool)control.Tag == false)control.Cursor = Cursors.No;break;}}private void ShuttleFrame_Click(object? sender, EventArgs e){var control = sender as Control;bool ischeck;switch (control.Name){case "L_Left":case "pic_Left":ischeck = !(bool)this.pic_Left.Tag;this.pic_Left.Tag = ischeck;DealAllCheck(this.Flow_Left_Bottom, ischeck);break;case "L_Right":case "pic_Right":ischeck = !(bool)this.pic_Right.Tag;this.pic_Right.Tag = ischeck;DealAllCheck(this.Flow_Right_Bottom, ischeck);break;case "Itempic":DealLeftORRight(control.Parent as Panel);break;case "L_RunLfet":if ((bool)control.Tag == false) return;ReMoveItem(Flow_Left_Bottom, Flow_Right_Bottom);break;case "L_RunRight":if ((bool)control.Tag == false) return;ReMoveItem(Flow_Right_Bottom, Flow_Left_Bottom);break;}ReSet(this.Flow_Right_Bottom);ReSet(this.Flow_Left_Bottom);}private void ReMoveItem(FlowLayoutPanel flow1,FlowLayoutPanel flow2){List<Panel> list = new List<Panel>();int count = 0;foreach (Panel item in flow1.Controls){var result = item.Tag as ShuttleFrameData;if (!result.IsCheck && result.IsShield == false && item.Visible == true) count++;if (result.IsCheck && result.IsShield == false && item.Visible == true) list.Add(item);}list.ForEach(item =>{flow1.Controls.Remove(item);var result = item.Tag as ShuttleFrameData;result.IsLeftORRight = !result.IsLeftORRight;result.IsCheck = false;if(Input_Right.Text != "关键字搜索" && Input_Right.Text != ""&&Input_Left.Text != "关键字搜索"&&Input_Left.Text!="")item.Visible = false;var pic = item.Controls[0] as PictureBox;pic.BackColor = pic_UnCheckBackColor;pic.Image = null;item.Tag = result;flow2.Controls.Add(item);});}public void SetShuttleFrame(List<ShuttleFrameData> shuttleFrameDatas){InitData = shuttleFrameDatas;shuttleFrameDatas.ForEach(m => { DealData(m); });}private void DealData(ShuttleFrameData shuttleFrameData){Panel panel = new Panel();panel.Height = 25;panel.Tag = shuttleFrameData;PictureBox pictureBox = new PictureBox();pictureBox.Parent = panel;pictureBox.BackColor = pic_UnCheckBackColor;pictureBox.Image = null;pictureBox.SizeMode = PictureBoxSizeMode.CenterImage;pictureBox.Size = new Size(25, 25);pictureBox.Location = new Point(0, 0);pictureBox.Paint += pic_Paint;pictureBox.Name = "Itempic";pictureBox.Click += ShuttleFrame_Click;pictureBox.MouseEnter += ShuttleFrame_MouseEnter;Label label = new Label();label.Parent = panel;label.Name = "Itempic";label.BackColor = Color.White;if (shuttleFrameData.IsShield) label.ForeColor = Color.DarkGray;else label.ForeColor = Color.Black;label.Text = shuttleFrameData.Title;label.Size= new Size(150, 25);label.Location = new Point(25, 0);label.Click += ShuttleFrame_Click;label.MouseEnter += ShuttleFrame_MouseEnter;label.MouseLeave += Label_MouseLeave;if (shuttleFrameData.IsLeftORRight){panel.Width = Flow_Left_Bottom.Width-35;Flow_Left_Bottom.Controls.Add(panel);}else{panel.Width = Flow_Right_Bottom.Width-30;Flow_Right_Bottom.Controls.Add(panel);}}private void Label_MouseLeave(object? sender, EventArgs e){var label = sender as Label;label.BackColor = Color.White; ;}/// <summary>/// 当所有操作都执行完,检查穿梭框中是否有选中的,或者是否全部选中/// </summary>private void ReSet(FlowLayoutPanel flow,int type=0){// bool IsAllCheck = flow.Name == "Flow_Left_Bottom" ? (bool)pic_Left.Tag : (bool)pic_Right.Tag;bool IsAllCheck = true;bool IsItemCheck = false;int count = 0;int Sumcount = 0;foreach (Panel item in flow.Controls){var result = item.Tag as ShuttleFrameData;if (result.IsShield == false && item.Visible == true) count++;if (result.IsCheck == false && result.IsShield == false && item.Visible == true) IsAllCheck = false;if(result.IsCheck==true&&result.IsShield==false&&item.Visible==true)IsItemCheck = true;}if(type==1)IsAllCheck = false;if (flow.Name== "Flow_Left_Bottom"){if (IsAllCheck&&count>0){pic_Left.BackColor = pic_CheckBackColor;pic_Left.Image = pic_Img;pic_Left.SizeMode = PictureBoxSizeMode.CenterImage;pic_Left.Tag = true;}else{pic_Left.BackColor = pic_UnCheckBackColor;pic_Left.Image = null;pic_Left.Tag = false;}if (IsItemCheck){L_RunLfet.Tag = true;L_RunLfet.BackColor = pic_CheckBackColor;L_RunLfet.Image = Properties.Resources.Check_Right_White;}else{L_RunLfet.Tag = false;L_RunLfet.BackColor = pic_UnCheckBackColor;L_RunLfet.Image = Properties.Resources.Check_Right_Grag;}}else{if (IsAllCheck && count > 0){pic_Right.BackColor = pic_CheckBackColor;pic_Right.Image = pic_Img;pic_Right.SizeMode = PictureBoxSizeMode.CenterImage;pic_Right.Tag = true;}else{pic_Right.BackColor = pic_UnCheckBackColor;pic_Right.Image = null;pic_Right.Tag = false;}if (IsItemCheck){L_RunRight.Tag = true;L_RunRight.BackColor = pic_CheckBackColor;L_RunRight.Image = Properties.Resources.Check_Left_White;}else{L_RunRight.Tag = false;L_RunRight.BackColor = pic_UnCheckBackColor;L_RunRight.Image = Properties.Resources.Check_Left_Grag;}}}private void pic_Paint(object? sender, PaintEventArgs e){Control control = sender as Control;ControlPaint.DrawBorder(e.Graphics,//获取进行绘制的图形new Rectangle(0, 0, control.Width, control.Height),//绘制控件所在工作区域Color.LimeGreen, 1, ButtonBorderStyle.Solid,//边框类型,选择实线边框,也有虚线等种类;下面这四个重复的传参是设置工作区上下左右边框的功能Color.LimeGreen, 1, ButtonBorderStyle.Solid,Color.LimeGreen, 1, ButtonBorderStyle.Solid,Color.LimeGreen, 1, ButtonBorderStyle.Solid);}private void this_Paint(object? sender, PaintEventArgs e){Control control = sender as Control;ControlPaint.DrawBorder(e.Graphics,//获取进行绘制的图形new Rectangle(0, 0, control.Width, control.Height),//绘制控件所在工作区域Color.FromArgb(224, 224, 224), 1, ButtonBorderStyle.Solid,//边框类型,选择实线边框,也有虚线等种类;下面这四个重复的传参是设置工作区上下左右边框的功能Color.FromArgb(224, 224, 224), 1, ButtonBorderStyle.Solid,Color.FromArgb(224, 224, 224), 1, ButtonBorderStyle.Solid,Color.FromArgb(224, 224, 224), 1, ButtonBorderStyle.Solid);}protected override void OnResize(EventArgs ea){//穿梭框的长和宽定死this.Height = 400;this.Width = 500;base.OnResize(ea);}private void Input_Left_TextChanged(object sender, EventArgs e){if (Input_Left.Text == "关键字搜索" || Input_Left.Text == ""){foreach (Panel item in Flow_Left_Bottom.Controls)if (item.Visible == false)item.Visible = true;return;}foreach (Panel item in Flow_Left_Bottom.Controls)if (!(item.Tag as ShuttleFrameData).Title.Contains(Input_Left.Text)) item.Visible = false;ReSet(this.Flow_Right_Bottom);ReSet(this.Flow_Left_Bottom);}private void Input_Right_TextChanged(object sender, EventArgs e){if (Input_Right.Text == "关键字搜索" || Input_Right.Text == ""){foreach (Panel item in Flow_Right_Bottom.Controls) if (item.Visible == false) item.Visible = true;ReSet(this.Flow_Right_Bottom);ReSet(this.Flow_Left_Bottom);}foreach (Panel item in Flow_Right_Bottom.Controls)if (!(item.Tag as ShuttleFrameData).Title.Contains(Input_Right.Text)) item.Visible = false;ReSet(this.Flow_Right_Bottom);ReSet(this.Flow_Left_Bottom);}private void DealAllCheck(FlowLayoutPanel flow, bool ischeck){foreach (Panel item in flow.Controls){var result = item.Tag as ShuttleFrameData;if (result.IsShield == false && result.IsCheck == !ischeck&&item.Visible==true){result.IsCheck = ischeck;if (ischeck){item.Controls[0].BackColor = pic_CheckBackColor;var pic = item.Controls[0] as PictureBox;pic.Image = pic_Img;pic.SizeMode = PictureBoxSizeMode.CenterImage;}else{item.Controls[0].BackColor = pic_UnCheckBackColor;var pic = item.Controls[0] as PictureBox;pic.Image = null;}item.Tag = result;}}}private void DealLeftORRight(Panel panel){var data = panel.Tag as ShuttleFrameData;if (data.IsShield) return;data.IsCheck = !data.IsCheck;panel.Tag = data;if (data.IsCheck){var pic = panel.Controls[0] as PictureBox;pic.BackColor = pic_CheckBackColor;pic.Image = pic_Img;pic.SizeMode = PictureBoxSizeMode.CenterImage;}else{var pic = panel.Controls[0] as PictureBox;pic.BackColor = pic_UnCheckBackColor;pic.Image = null;}}}public class ShuttleFrameData{/// <summary>/// Id  可以对应数据库主键,方存储/// </summary>public string Id { get; set; }/// <summary>/// 标题/// </summary>public string Title { get; set; }/// <summary>/// 是否选中,用于穿梭框的操作,默认False/// </summary>public bool IsCheck { get; set; }/// <summary>/// 是左侧值还是右侧值,这个用于初始化。/// </summary>public bool IsLeftORRight { get; set; }/// <summary>/// 是否屏蔽某些值/// </summary>public bool IsShield { get; set; }}
 private void Init(){List<ShuttleFrameData> list = new List<ShuttleFrameData>(){new ShuttleFrameData(){Id="1",Title="李白",IsShield=false,IsLeftORRight=true },new ShuttleFrameData(){Id="1",Title="杜甫",IsShield=false,IsLeftORRight=true },new ShuttleFrameData(){Id="1",Title="白居易",IsShield=true,IsLeftORRight=true },new ShuttleFrameData(){Id="1",Title="李清照",IsShield=false,IsLeftORRight=false },new ShuttleFrameData(){Id="1",Title="秦观",IsShield=false,IsLeftORRight=true },new ShuttleFrameData(){Id="1",Title="苏轼",IsShield=false,IsLeftORRight=false },new ShuttleFrameData(){Id="1",Title="李煜",IsShield=false,IsLeftORRight=true },new ShuttleFrameData(){Id="1",Title="王勃",IsShield=false,IsLeftORRight=true },new ShuttleFrameData(){Id="1",Title="柳永",IsShield=false,IsLeftORRight=true },new ShuttleFrameData(){Id="1",Title="秦观",IsShield=false,IsLeftORRight=true },new ShuttleFrameData(){Id="1",Title="苏轼",IsShield=false,IsLeftORRight=false },new ShuttleFrameData(){Id="1",Title="李煜",IsShield=false,IsLeftORRight=true },new ShuttleFrameData(){Id="1",Title="王勃",IsShield=false,IsLeftORRight=true },new ShuttleFrameData(){Id="1",Title="柳永",IsShield=false,IsLeftORRight=true },};shuttleFrameControl1.SetShuttleFrame(list);}

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/758766.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mpc

https://blog.csdn.net/apr15/article/details/133965768在“数据安全概述”里面, 我们提到了安全多方计算SMPC(Secure multi-party computation)的技术。在这个计算里面代表是密码分享SS (secret sharing)技术。 而开启整个算法世界的其实是华人科学家姚期智教授, 他提出…

一般网站制作流程

制作需要经过以下几个流程:设计页面效果图,一般为PSD或者PNG格式的原图; 将页面效果图输出为HTML格式,后缀名为“.htm”; 根据页面内容调用需求生成或者编写标签所需代码; 嵌套标签代码到输出页面对应位置; 测试调试模板文件,保证调用和设计效果一致; 将模板标签、文件…

帝国CMS的网站“Notice: Use of undefined constant”错误说明

“Notice: Use of undefined constant”错误说明解答:php.ini配置问题,按下面修改即可解决: 修改php.ini,把error_reporting = E_ALL改成 error_reporting = E_ALL & ~E_NOTICE扫码添加技术【解决问题,仅需10元起】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精…

DASCTF 2023六月挑战赛|二进制专项 PWN (上)

DASCTF 2023六月挑战赛|二进制专项 PWN (上) 1.easynote edit函数对长度没有检查free函数存在UAF漏洞思路:1.通过堆溢出,UAF,修改size位达到堆块重叠,使用fastbin attack,把__malloc_hook,写入one_gadget 2.通过unlink修改free got表为system exp: from pwn import * co…

易优cms后台数据类型的开关功能如何默认都显示“开”

新建字段默认就是true,就是扫码添加技术【解决问题,仅需10元起】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、网站改版、BUG修复、问题处理、二次开发、PSD转HTML、网站被黑、网站漏洞修复等。专…

eyoucms获取当前栏目分类的下级栏目的文档列表

[基础用法] 标签:modelsartlist (channelartlist)备注:使用channelartlist也可以正常输出描述:获取当前栏目分类的下级栏目的文档列表 用法: {eyou:modelsartlist typeid=栏目ID type=son loop=20} <a href={eyou:field name=typeurl /}>{eyou:field name=typename…

帝国CMS忘记后台登陆认证码怎么处理

忘记后台登陆认证码怎么办?查看/e/class/config.php文件里的“$do_loginauth”变量内容。扫码添加技术【解决问题,仅需10元起】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、网站改版、BUG修复、…

dedecms织梦更新生成栏目没反应问题总汇

织梦dedecms栏目无法更新是最头疼的事情,因为导致dedecms栏目不能更新的因素有很多,至 于大家都是什么原因导致的我也无法确定,因此整理了笔者所知道的一些原因,希望对大家有所帮助, 下面大家跟我一起来看下,你遇到的dede更新栏目无效是下面的哪一种情况:方法/步骤第一种…

易优cms登陆后台,总是提示验证码错误,账户密码都对!

问题: 易优cms登陆后台,总是提示验证码错误,账户密码都对!解决办法: 检查下目录权限,或者用排除法,弄回本地安装看看,如果可以,就是空间环境哪里设置有问题。扫码添加技术【解决问题,仅需10元起】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、H…

DedeTag Engine Create File False的彻底解决方法总汇

错误记录: DedeTag Engine Create File False的彻底解决方法总汇解决方案: DedeTag Engine Create File False这个问题真是折磨人,说小不小说大不大,这里分享一下DedeTag Engine Create File False的解决办法 方法1:确认文件夹a、data(以前的版本好像html,你也可能自定…

用SqlBulkCopy批量插入数据 遇到的错误

原文链接:https://www.cnblogs.com/wz327/archive/2011/07/05/2098356.html 错误一:来自数据源的 String 类型的给定值不能转换为指定目标列的类型 nvarchar。 还有其他的错误如:AddTime不能为DBNull (这个应该是目标表中AddTime要求不许为null) 可能的原因有两种 可能是…

初用IDEA的springboot第一步

根据网上课程的学习,运用IDEA时率先需要搭建环境 搭建环境的第一步 1.创建项目 点击file列表下的project,在project中找到Maven勾选左上角方块(必须勾选,否则无法下一步),选择org.apache.maven.archetypes:maven-archtype-webapp,点击next,填写项目名称,点击next,第一…