用户控件之Child控件操作

博客介绍了用户控件中Child控件的操作。通过自定义控件,公开向上、向下、增加、删除等操作方法供父窗口注册,父窗口可借此对子自定义控件进行相应操作。还说明了实现步骤,最后提供了相关文件下载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用户控件之Child控件操作

自定义控件,公开向上/向下/增加/删除等几个操作的方法,用于让父窗口注册,父窗口通过这些方法可以实现对子自定义控件的向上/向下/增加/删除等操作。如下效果:

image.png | left | 747x174

1.自定义控件:

 /// <summary>  
    /// 操作枚举  
    /// </summary>  
    public enum Operator
    {
        /// <summary>  
        /// 上移  
        /// </summary>  
        Up,
        /// <summary>  
        /// 下移  
        /// </summary>  
        Down,
        /// <summary>  
        /// 移除  
        /// </summary>  
        Remove,
        Add
    }  

    public partial class UCChild : UserControl
    {
        public UCChild()
        {
            InitializeComponent();
        }

        public Action<object, Operator> OnOperatorClick = null;
        private void btnRemove_Click(object sender, EventArgs e)
        {
            OnOperatorClick(this, Operator.Remove);
        }

        private void btnDown_Click(object sender, EventArgs e)
        {
            OnOperatorClick(this, Operator.Down);
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            OnOperatorClick(this, Operator.Add);
        }

        private void btnUp_Click(object sender, EventArgs e)
        {
            OnOperatorClick(this, Operator.Up);
        }
    }

2.new自定义控件,并注册方法:

UCChild uc = new UCChild();
uc.OnOperatorClick += new Action<object, Operator>(ucSwitchPic_OnOperatorClick);
flowLayoutPanel1.Controls.Add(uc);

3.在调用界面分别对自定义控件的方法做出相应,以达到想要的效果:

private void ucSwitchPic_OnOperatorClick(object sender, Operator op)
        {
            UCChild uc = sender as UCChild;
            int oldIndex = flowLayoutPanel1.Controls.IndexOf(uc);//获取操作项的索引值  
            switch (op)
            {
                case Operator.Up:
                    if (oldIndex == 0)//顶层了
                    {
                        MessageBox.Show("已经第一项了");
                    }
                    else
                    {
                        UCChild ucUp = this.flowLayoutPanel1.Controls[oldIndex - 1] as UCChild;//获取上一项
                        this.flowLayoutPanel1.Controls.SetChildIndex(ucUp, oldIndex);
                        this.flowLayoutPanel1.Controls.SetChildIndex(uc, oldIndex - 1);
                    }
                    break;
                case Operator.Down:
                    if (oldIndex == flowLayoutPanel1.Controls.Count - 1)//底层了
                    {
                        MessageBox.Show("已经最后一项了");
                    }
                    else
                    {
                        UCChild ucDown = this.flowLayoutPanel1.Controls[oldIndex + 1] as UCChild;//获取下一项
                        this.flowLayoutPanel1.Controls.SetChildIndex(ucDown, oldIndex);
                        this.flowLayoutPanel1.Controls.SetChildIndex(uc, oldIndex + 1);
                    }
                    break;
                case Operator.Remove:
                    UCChild uc1 = this.flowLayoutPanel1.Controls[oldIndex] as UCChild;
                    this.flowLayoutPanel1.Controls.Remove(uc1);
                    break;
                case Operator.Add:
                    UCChild uc2 = new UCChild();
                    uc2.OnOperatorClick += new Action<object, Operator>(ucSwitchPic_OnOperatorClick);
                    this.flowLayoutPanel1.Controls.Add(uc2);
                    break;
            }
        }

download: ChildUserControl.zip

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zy100Papa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值