winforms Click事件在自定义列表框C#上不起作用

ogsagwnx  于 2022-11-25  发布在  C#
关注(0)|答案(1)|浏览(193)

这是CustomListBox的实作

class CustomListBox : UserControl
    {
        //Fields
        private Color borderColor = Color.MediumSlateBlue;
        private int borderSize = 1;

        //Items
        private ListBox Listb;

        //Properties
        [Category("Custom")]
        public Color BorderColor
        {
            get { return borderColor; }
            set
            {
                borderColor = value;
            }
        }

        [Category("Custom")]
        public int BorderSize
        {
            get { return borderSize; }
            set
            {
                borderSize = value;
                this.Padding = new Padding(borderSize);//Border Size
                AdjustListBoxDimensions();
            }
        }

        [Category("Custom")]
        public override Color BackColor
        {
            get { return base.BackColor; }
            set
            {
                this.Listb.BackColor = value;
                base.BackColor = value;
            }
        }

        public void Add(object item)
        {
            this.Listb.BeginUpdate();
            this.Listb.Items.Add(item);
            this.Listb.EndUpdate();
        }

        public void Clear()
        {
            this.Listb.BeginUpdate();
            this.Listb.Items.Clear();
            this.Listb.EndUpdate();
        }

        public int SelectedIndex()
        {
            return this.Listb.SelectedIndex;
        }

        public object Item(int index)
        {
            return this.Listb.Items[index];
        }

        

        // List Properties
        public CustomListBox()
        {
            Listb = new ListBox();
            this.SuspendLayout();
            // ListBox
            Listb.BorderStyle = BorderStyle.None;
            Listb.DrawMode = DrawMode.OwnerDrawFixed;
            Listb.Font = new Font("Cascadia Mono", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            Listb.ForeColor = Color.FromArgb(((int)(((byte)(249)))), ((int)(((byte)(249)))), ((int)(((byte)(249)))));
            Listb.FormattingEnabled = true;
            Listb.ItemHeight = 24;
            Listb.Location = new Point(0,0);
            Listb.Name = "CustomListBox";
            Listb.Size = new Size(235, 936);
            Listb.DrawItem += new DrawItemEventHandler(Listb_DrawItem);
            Listb.Dock = DockStyle.Fill;
            Listb.BackColor = BackColor;

            Controls.Add(Listb);
            ResumeLayout();
            AdjustListBoxDimensions();

        }

        // Highlight event
        private void Listb_DrawItem(object sender, DrawItemEventArgs e)
        {
            Color backgroundColor = Color.FromArgb(50, 50, 50);
            Color horizontalColor = Color.FromArgb(100, 100, 100);

            if (e.Index >= 0)
            {
                SolidBrush sb = new SolidBrush(((e.State & DrawItemState.Selected) == DrawItemState.Selected) ? horizontalColor : backgroundColor);
                e.Graphics.FillRectangle(sb, e.Bounds);
                string text = Listb.Items[e.Index].ToString();
                SolidBrush tb = new SolidBrush(e.ForeColor);
                e.Graphics.DrawString(text, e.Font, tb, Listb.GetItemRectangle(e.Index).Location);
            }
        }



        //Adjust Dimension (Still in test)
        private void AdjustListBoxDimensions()
        {
            Listb.Location = new Point()
            {
                X = this.Width - this.Padding.Right - Listb.Width,
                Y = Listb.Height
            };
        }

        // Draws the border
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            Graphics graph = e.Graphics;
            //Draw border
            using (Pen penBorder = new Pen(borderColor, borderSize))
            {
                penBorder.Alignment = PenAlignment.Inset;
                graph.DrawRectangle(penBorder, 0, 0, this.Width - 0.5F, this.Height - 0.5F);
            }
        }



    }

在一个窗体中,我创建了上述控件并执行了click事件,问题是由于特灵执行此操作而产生的:(MainLB -〉控件名称)

private void MainLB_Click(object sender, EventArgs e)
        {
            string text = MainLB.Item(MainLB.SelectedIndex()).ToString();
        }

MainLB_Click未触发!
当点击发生时,我认为自定义控件通过认为点击是在列表框内部来处理它。
说,我的问题是,我不知道如何使事件点击工作。
有人能帮我吗?

mctunoxg

mctunoxg1#

我不知道您在做什么,但我想您正在NET Windows窗体中做一些事情:

在*设计编辑器中检查列表框事件*可能您没有添加此事件或键入了错误的事件名称。

相关问题