`
huafeng880830
  • 浏览: 6304 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Winform折叠菜单实现

阅读更多

在我还没工作前,听朋友说起他面试时遇到的情况,当时面试他的考官要他用C#实现折叠菜单效果,不用第三方控件,对于当时准备不充分的他可谓是来了个措手不及呀!回来后告诉了我们,抱着试试的心里,尝试实现一番,呵呵,没想到还是让我实现了!现在翻出当时实现的代码供初学者学习,高手免了。这个示例用四个button、四个label和一个panel来实现。下面是截图:

准备开始阶段,四个button、四个label和一个panel,调整好它们之间的位置:

运行后的截图:

图一

图二

图三

图四

实现代码:

Form1.cs

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

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        List<Button> list = new List<Button>();
        private void button1_Click(object sender, EventArgs e)
        {
            this.label1.Visible = true;
            this.label2.Visible = false;
            this.label3.Visible = false;
            this.label4.Visible = false;
            ChangeLocation(this.button1);
        }


        private void button2_Click(object sender, EventArgs e)
        {
            this.label1.Visible = false;
            this.label2.Visible = true;
            this.label3.Visible = false;
            this.label4.Visible = false;
            ChangeLocation(this.button2);
        }
        /// <summary>
        /// 改变按钮位置
        /// </summary>
        /// <param name="btn"></param>
        private void ChangeLocation(Button btn)
        {
            int num1 = int.Parse(btn.Name.Substring(6));//num1 代表本按钮的名称序号
            string direction = null;//定义一个方向变量
            if (btn.Top > this.panel1.Top)//如果本按钮的纵坐标大于面板的纵坐标
            {
                direction = "up";//设置方向变量的值为“up” 即代表菜单向上翻
            }
            else if (btn.Top + btn.Height < this.panel1.Top) //如果本按钮的纵坐标加本按钮的高度小于面板的纵坐标
            {
                direction = "down";//设置方向变量的值为“down” 即代表菜单向下翻
            }
            if (direction != null)//如果方向变量的值不为空
            {
                btn.Top = this.button1.Top + (btn.Height) * (num1 - 1);//设置本按钮的纵坐标等于本折叠菜单的第一个按钮的纵坐标加上在本按钮之上的几个按钮的高度之和
                this.panel1.Top = btn.Top + btn.Height;//面板的纵坐标等于本按钮的纵坐标加上本按钮的高度
                int count = 1;//定义计数变量 计算在本按钮之上或之下的按钮有多少个
                //循环遍历菜单按钮集合
                foreach (Button bt in list)
                {
                    int num2=int.Parse(bt.Name.Substring(6));//得到此按钮的名称序号 即集合中此子元素按钮的名称序号
                    if (direction == "up")//如果方向变量值为“up”,即菜单往上翻
                    {
                        if (num2 < num1 && num2 != 1)//如果此子元素按钮的名称序号小于本按钮的名称序号,并且此子元素按钮的名称序号不等于1
                        {
                            bt.Top = button1.Top + btn.Height * count;//此子元素按钮的纵坐标等于本折叠菜单的第一个按钮的纵坐标加上此子元素按钮之上的几个按钮的高度之和
                            if (num2 == num1 - 1)//如果此子元素按钮的名称序号等于本按钮的名称序号减1,则
                                break;//跳出方法
                            count++;//按钮个数加1
                        }
                        
                    }
                    else//否则方向变量值为“down”,即菜单往下翻
                    {
                        if (num2 > num1)//如果此子元素按钮的名称序号大于本按钮的名称序号
                        {
                            bt.Top = btn.Top + btn.Height * count + this.panel1.Height;//此子元素按钮的纵坐标等于本按钮的纵坐标加上本按钮之下的几个按钮的高度之和
                            count++;//按钮个数加1
                        }
                    }
                }
               
                
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            this.label1.Visible = false;
            this.label2.Visible = false;
            this.label3.Visible = true;
            this.label4.Visible = false;
            ChangeLocation(this.button3);
        }

        private void button4_Click(object sender, EventArgs e)
        {
            this.label1.Visible = false;
            this.label2.Visible = false;
            this.label3.Visible = false;
            this.label4.Visible = true;
            ChangeLocation(this.button4);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.label1.Visible = true;
            this.label2.Visible = false;
            this.label2.Location = this.label1.Location;
            this.label3.Visible = false;
            this.label3.Location = this.label1.Location;
            this.label4.Visible = false;
            this.label4.Location = this.label1.Location;

            list.Add(button1);
            list.Add(button2);
            list.Add(button3);
            list.Add(button4);
        }
    }
}


程序下载地址:http://download.csdn.net/source/2409912

分享到:
评论

相关推荐

    WinForm折叠菜单实现

    本文将深入探讨如何在WinForm应用中实现折叠菜单,以及如何利用DockPanel控件增强其功能。 首先,折叠菜单的核心在于控件之间的交互和状态管理。在WinForm中,我们可以使用MenuStrip或ContextMenuStrip控件来创建...

    winform折叠面板(c# )

    总结起来,C# Winform中的折叠面板主要依赖于Panel、Button等控件的组合与交互,通过编程逻辑控制容器的可见性来实现折叠和展开的功能。对于初学者,这是一个很好的练习项目,可以加深对Winform控件和事件处理的理解...

    Winform折叠菜单

    本篇将深入探讨如何在Winform应用中实现折叠菜单及其相关组件,如折叠面板。 一、菜单导航 菜单导航是应用程序中一种用户友好的交互方式,它允许用户通过点击菜单项来访问不同的功能或子菜单。在Winform中,我们...

    一个简单的winform折叠菜单

    这个“一个简单的winform折叠菜单”项目显然旨在展示如何利用C#编程语言和.NET Framework实现这样的功能。下面我们将深入探讨相关的知识点。 首先,折叠菜单的核心在于控件的层次结构和状态管理。在Winform中,我们...

    Winform折叠菜单示例(C#)

    在"Winform折叠菜单示例"中,我们将使用C#的控件和事件处理来模拟折叠菜单的效果。主要涉及的控件有Button和Panel。Button通常用于触发某个操作,而Panel则常被用作容器,可以包含其他控件,并且可以调整其可见性来...

    C#Winform左侧伸缩菜单实现

    在C# WinForm应用开发中,创建一个...通过以上步骤,你可以在C# WinForm应用中实现一个功能完善的左侧伸缩菜单。记住,好的界面设计能够显著提升用户的操作体验,因此在实现功能的同时,也要注重界面的美观性和易用性。

    C# winform dockpanel 可折叠的菜单控件(含文档)

    7. **集成与应用**:在实际项目中,开发者可以将这个可折叠菜单控件添加到WinForm窗体中,通过编程设置菜单项、折叠状态,并与其他控件进行交互。这不仅可以提高界面的专业感,也能优化用户的操作流程,提升软件的...

    winform左侧菜单

    在Windows Forms(Winform)开发中,左侧菜单通常用于实现应用程序的导航功能,提供清晰的模块划分,方便用户快速访问各个功能...这个示例程序通常会包含注释和代码逻辑,帮助初学者理解Winform应用中的菜单实现细节。

    Web2.0外观的可折叠导航菜单控件(C#winform)

    在本文中,我们将深入探讨如何使用C# WinForm开发具有Web2.0外观的可折叠导航菜单控件。首先,我们需要理解Web2.0的概念,它代表了互联网的一个新时代,强调用户交互性、社区参与度和富媒体内容。将这种外观应用于...

    C# winform左侧导航菜单栏(抽屉型)

    在C# WinForm中,我们通常会使用`Button`控件来作为触发开关,用户点击按钮时,菜单栏(通常由`TreeView`控件实现)会滑入或滑出。这种效果可以通过调整控件的位置和尺寸来实现,或者利用`AnimateWindow` API函数...

    CodeProject winform折叠导航控件

    在使用CodeProject的winform折叠导航控件时,开发者需要下载项目文件,然后在自己的Winform项目中引用控件的源代码,通过实例化控件并设置相关属性,将它添加到窗体上。同时,需要理解控件的API,以便根据具体需求...

    winfrom左侧折叠菜单

    winfrom 左侧折叠菜单 自己写的虽然不是很好看,但是能用

    QQ折叠式菜单C#控件及源码

    跟QQ的折叠菜单类似,和XP系统左侧可折叠式菜单也很像,可以折叠、展开,可以自己定义颜色,非常有用的一个源码,样式和outlook左侧菜单差不多! 使用方法请看:http://worktool.cn/show.aspx?id=29&cid=40

    winform 无限级树形菜单

    通过以上步骤,我们就可以实现一个自定义的Winform无限级树形菜单控件。这个控件不仅可以用于菜单系统,还可以用于文件系统、组织结构、数据库关系等需要层次展示的场景。记得在实际项目中根据具体需求进行适当的...

    C#实现用树型列表动态显示菜单,Winform 常用的UI设计

    总结起来,使用C#实现Winform的树型列表动态显示菜单,主要涉及`TreeView`控件和`TreeNode`类的使用,包括节点的创建、添加、事件监听以及可能的数据绑定。通过这些基础操作,你可以构建出符合业务需求的菜单系统,...

    Window风格的手风琴菜单

    3. JavaScript交互:使用JavaScript实现菜单的动态展开和折叠功能。这通常涉及到事件监听(如点击事件)、类的添加与移除(用于切换展开/折叠状态)以及DOM操作。 ```javascript document.addEventListener('...

    C#仿WINDOWS可折叠导航栏

    `MenuStrip`控件允许我们添加菜单项、子菜单项等,可以轻松实现折叠效果。 3. 添加菜单项:在`MenuStrip`上右键点击,选择“添加”-&gt;“菜单项”,然后为每个功能区添加相应的菜单项。为了实现折叠效果,我们可以...

    C#仿Windows可折叠导航栏

    为了实现折叠功能,可以为每个菜单项添加子菜单项,它们将作为导航栏的子选项。 3. 图标支持:为了让导航栏看起来更像Windows风格,可以在菜单项上添加图标。使用`ToolStripMenuItem.Image`属性设置小图标,可以是...

    C# 简单反射实现winform左侧树形导航,右侧切换内容

    在Winform应用中,左侧通常用于展示菜单或者导航结构,可以使用`TreeView`控件来实现。`TreeView`控件可以创建一个层次化的视图,每个节点代表一个类或模块,节点的子节点则表示该类的方法或属性。当用户点击`...

    VC 窗体框架可折叠展开 Tree树菜单视图例子.rar

    VC 窗体框架可折叠展开 Tree树菜单视图例子,这个框架可随意拉动,变换窗口大小,另外左侧框架中的树形菜单也是大家平时经常用到的编程技巧,树形菜单的实用性非常强,另外里面还有一些其它的技巧,都是对学习VC ...

Global site tag (gtag.js) - Google Analytics