C#下通过控件实现下拉查看功能

今天看见一个代码很好用的,分享记录一下。
要求:
在c#中,用其中的控件实现下拉菜单显示。
即用按钮实现收缩菜单。
本文选用简单的button按钮和Listbox实现。
先看效果图:
在这里插入图片描述
图中不光实现了下拉,还额外设计了颜色变化。实现的基础是基于listbox中的drawitem()。

实现步骤:
1、随意创建一个C#程序即可。
2、先设置button按钮和listbox按钮。
3、设置listbox按钮属性中DrawMode为另外两个,根据你的需要设计。
4、编写下拉功能实现代码。
(1)主框架上

  private void Form1_Load(object sender, EventArgs e)
        {
            LoadList();
        }

(2)定义loadlist()

private void LoadList()
        {
            button1.BringToFront();
            button1.Dock = DockStyle.Top;
            listBox1.BringToFront();
            listBox1.Dock = DockStyle.Top;
            button2.BringToFront();
            button2.Dock = DockStyle.Top;
            listBox2.BringToFront();
            listBox2.Dock = DockStyle.Top;
            button3.BringToFront();
            button3.Dock = DockStyle.Top;
            listBox3.BringToFront();
            listBox3.Dock = DockStyle.Top;
            listBox1.Visible = false;
            listBox2.Visible = false;
            listBox3.Visible = false;
        }```
(3)button按钮功能实现
双击图形上的按钮进入代码编写界面

```csharp
private void button1_Click(object sender, EventArgs e)
        {
            if (a == 0)
            {
                listBox1.Visible = true;
                a = 1;
            }
            else
            {
                a = 0;
                listBox1.Visible = false;
            }
        }

其他两个按钮通上编写。
这里值得注意的是要在前面声明三个初始量为0的三个变量,用来实现判断。

public partial class Form1 : Form
    {
        private Color SetColor = Color.AliceBlue;//

        int a, b, c = 0;
        public Form1()
        {
            InitializeComponent();
        }
        .......

4、实现按钮变色功能
直接上代码

 private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
        {
            ListBox lb = sender as ListBox;
            e.DrawBackground();
            Brush myBrush = Brushes.Black;
            if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
            {
                myBrush = new SolidBrush(SetColor);
                e.Graphics.FillRectangle(myBrush, e.Bounds);
            }
            //可针对每一列数据更改背景色
            switch (e.Index)
            {
                case 0:
                    myBrush = Brushes.Red;
                    break;
                case 1:
                    myBrush = Brushes.Orange;
                    break;
                case 2:
                    myBrush = Brushes.Purple;
                    break;
                case 3:
                    myBrush = Brushes.Aquamarine;
                    break;
                case 4:
                    myBrush = Brushes.BlueViolet;
                    break;
            }
            StringFormat strFormat = new StringFormat();
            strFormat.Alignment = StringAlignment.Center;
            strFormat.LineAlignment = StringAlignment.Center;
            e.DrawFocusRectangle();
            e.Graphics.DrawString(lb.Items[e.Index].ToString(), e.Font, myBrush, e.Bounds, strFormat);
        }

       

其他两个listbox上也是同样编码。

5、运行检查一下代码是否出现错误,根据自身情况进行更改。
代码比较简单,一般不会有什么问题。

总结一下,代码总体很容易实现看懂。不过问题也是很明显,这样实现的下拉菜单会占用很大的空间,不适用于一些特殊要求,本人认为用于学习控件就可以了。

最后附上代码原文:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WinFormsApp2
{
    public partial class Form1 : Form
    {
        private Color SetColor = Color.AliceBlue;//

        int a, b, c = 0;
        public Form1()
        {
            InitializeComponent();
        }

        
        private void Form1_Load(object sender, EventArgs e)
        {
            LoadList();
        }
        //实现菜单下拉功能
        private void LoadList()
        {
            button1.BringToFront();
            button1.Dock = DockStyle.Top;
            listBox1.BringToFront();
            listBox1.Dock = DockStyle.Top;
            button2.BringToFront();
            button2.Dock = DockStyle.Top;
            listBox2.BringToFront();
            listBox2.Dock = DockStyle.Top;
            button3.BringToFront();
            button3.Dock = DockStyle.Top;
            listBox3.BringToFront();
            listBox3.Dock = DockStyle.Top;
            listBox1.Visible = false;
            listBox2.Visible = false;
            listBox3.Visible = false;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (a == 0)
            {
                listBox1.Visible = true;
                a = 1;
            }
            else
            {
                a = 0;
                listBox1.Visible = false;
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (b == 0)
            {
                listBox2.Visible = true;
                b = 1;
            }
            else
            {
                b = 0;
                listBox2.Visible = false;
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            if (c == 0)
            {
                listBox3.Visible = true;
                c = 1;
            }
            else
            {
                c = 0;
                listBox3.Visible = false;
            }
        }


        private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
        {
            ListBox lb = sender as ListBox;
            e.DrawBackground();
            Brush myBrush = Brushes.Black;
            if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
            {
                myBrush = new SolidBrush(SetColor);
                e.Graphics.FillRectangle(myBrush, e.Bounds);
            }
            //可针对每一列数据更改背景色
            switch (e.Index)
            {
                case 0:
                    myBrush = Brushes.Red;
                    break;
                case 1:
                    myBrush = Brushes.Orange;
                    break;
                case 2:
                    myBrush = Brushes.Purple;
                    break;
                case 3:
                    myBrush = Brushes.Aquamarine;
                    break;
                case 4:
                    myBrush = Brushes.BlueViolet;
                    break;
            }
            StringFormat strFormat = new StringFormat();
            strFormat.Alignment = StringAlignment.Center;
            strFormat.LineAlignment = StringAlignment.Center;
            e.DrawFocusRectangle();
            e.Graphics.DrawString(lb.Items[e.Index].ToString(), e.Font, myBrush, e.Bounds, strFormat);
        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void listBox2_DrawItem(object sender, DrawItemEventArgs e)
        {
            ListBox lb = sender as ListBox;
            e.DrawBackground();
            Brush myBrush = Brushes.Black;
            if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
            {
                myBrush = new SolidBrush(SetColor);
                e.Graphics.FillRectangle(myBrush, e.Bounds);
            }
            //可针对每一列数据更改背景色
            switch (e.Index)
            {
                case 0:
                    myBrush = Brushes.Red;
                    break;
                case 1:
                    myBrush = Brushes.Orange;
                    break;
                case 2:
                    myBrush = Brushes.Purple;
                    break;
                case 3:
                    myBrush = Brushes.Aquamarine;
                    break;
                case 4:
                    myBrush = Brushes.BlueViolet;
                    break;
            }
            StringFormat strFormat = new StringFormat();
            strFormat.Alignment = StringAlignment.Center;
            strFormat.LineAlignment = StringAlignment.Center;
            e.DrawFocusRectangle();
            e.Graphics.DrawString(lb.Items[e.Index].ToString(), e.Font, myBrush, e.Bounds, strFormat);
        }
        private void listBox3_DrawItem(object sender, DrawItemEventArgs e)
        {
            ListBox lb = sender as ListBox;
            e.DrawBackground();
            Brush myBrush = Brushes.Black;
            if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
            {
                myBrush = new SolidBrush(SetColor);
                e.Graphics.FillRectangle(myBrush, e.Bounds);
            }
            //可针对每一列数据更改背景色
            switch (e.Index)
            {
                case 0:
                    myBrush = Brushes.Red;
                    break;
                case 1:
                    myBrush = Brushes.Orange;
                    break;
                case 2:
                    myBrush = Brushes.Purple;
                    break;
                case 3:
                    myBrush = Brushes.Aquamarine;
                    break;
                case 4:
                    myBrush = Brushes.BlueViolet;
                    break;
            }
            StringFormat strFormat = new StringFormat();
            strFormat.Alignment = StringAlignment.Center;
            strFormat.LineAlignment = StringAlignment.Center;
            e.DrawFocusRectangle();
            e.Graphics.DrawString(lb.Items[e.Index].ToString(), e.Font, myBrush, e.Bounds, strFormat);
        }

    }
}

最后,欢迎大家指正提意见。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值