使用C#语言实现的查询条件界面展开和收起功能_C#教程

先简单说一下应用场景,现有一个C#客户端的查询界面,上方放置查询条件,下方放置查询结果。因为实际情况中查询条件可能占了好几行的位置,所以希望在界面上默认只保留一行最主要的查询条件,并在右侧有一个“展开/收起”功能。

收起时界面:

展开时界面:

最开始我的实现方式是这样的,在界面上放置一个LinkLabel,设置此LinkLabel的鼠标单击事件,调整查询条件所在Panel的Height属性。

C#代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace SatyrAndNymph
{
public partial class FormMethod1 : Form
{
//收起状态时Panel高度
private const int HeightWhenFold = 50;
//收起状态时LinkLabel显示文字
private const string DescriptionWhenFold = "展开";
//展开状态时Panel高度
private const int HeightWhenExpand = 85;
//展开状态时LinkLabel显示文字
private const string DescriptionWhenExpand = "收起";
/// <summary>
/// 窗体构造函数
/// </summary>
public FormMethod1()
{
InitializeComponent();
//构造函数后将Panel调整为收起状态
lnkControlHeight.Text = DescriptionWhenFold;
pnlQueryConds.Height = HeightWhenFold;
}
/// <summary>
/// LinkLabel单击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lnkControlHeight_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
//根据显示文字为展开/收起,调整Panel的高度及LinkLabel展示文字
if (lnkControlHeight.Text == DescriptionWhenFold)
{
lnkControlHeight.Text = DescriptionWhenExpand;
pnlQueryConds.Height = HeightWhenExpand;
}
else if (lnkControlHeight.Text == DescriptionWhenExpand)
{
lnkControlHeight.Text = DescriptionWhenFold;
pnlQueryConds.Height = HeightWhenFold;
}
}
}
}

不过我认为这样处理还是不够完美:每次使用都需要专门创建一个LinkLabel,并且每个页面的代码都不一样,因为父容器的标识符是不一样的。

为了解决这两个问题,我设计了一个自定义控件以方便后续的开发工作。

控件名为HeightController,界面如下:

自定义控件中只包含一个LinkLabel,AutoSize属性被设置为False,Dock属性被设置为Full,TextAlign属性被设置为MiddleLeft。

C#代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace SatyrAndNymph
{
/// <summary>
/// 展开/收起控制器
/// </summary>
public partial class HeightController : UserControl
{
/// <summary>
/// 展开/收起控制器
/// </summary>
public HeightController()
{
InitializeComponent();
}
private void HeightController_Load(object sender, EventArgs e)
{
//设计器模式时,不触发展开/收起,否则会对设计工作造成干扰
if (!this.DesignMode)
{
//调整展开/收起情况
if (ControllerStatus == ControllerStatusEnum.FOLD)
{
Fold();
}
else if (ControllerStatus == ControllerStatusEnum.EXPAND)
{
Expand();
}
}
}
/// <summary>
/// 控制器状态
/// </summary>
private ControllerStatusEnum _controllerStatus = ControllerStatusEnum.FOLD;
///<summary>
/// 控制器状态
///</summary>
[System.ComponentModel.Description("控制器状态")]
public ControllerStatusEnum ControllerStatus
{
get
{
return _controllerStatus;
}
set
{
_controllerStatus = value;
}
}
/// <summary>
/// 父容器展开
/// </summary>
public void Expand()
{
ControllerStatus = ControllerStatusEnum.EXPAND;
if (this.Parent != null)
{
this.Parent.Height = HeightWhenExpand;
}
this.lnkHeightController.Text = DescriptionWhenExpand;
}
/// <summary>
/// 父容器收起
/// </summary>
public void Fold()
{
ControllerStatus = ControllerStatusEnum.FOLD;
if (this.Parent != null)
{
this.Parent.Height = HeightWhenFold;
}
this.lnkHeightController.Text = DescriptionWhenFold;
}
/// <summary>
/// 收起时高度
/// </summary>
private int _heightWhenFold = 50;
///<summary>
/// 收起时高度
///</summary>
[DefaultValue(50)]
[System.ComponentModel.Description("收起时高度")]
public int HeightWhenFold
{
get
{
return _heightWhenFold;
}
set
{
_heightWhenFold = value;
}
}
/// <summary>
/// 收起时显示文字
/// </summary>
private string _descriptionWhenFold = "展开";
///<summary>
/// 收起时显示文字
///</summary>
[System.ComponentModel.Description("收起时显示文字")]
public string DescriptionWhenFold
{
get
{
return _descriptionWhenFold;
}
set
{
_descriptionWhenFold = value;
}
}
/// <summary>
/// 展开时高度
/// </summary>
private int _heightWhenExpand = 85;
///<summary>
/// 展开时高度
///</summary>
[DefaultValue(85)]
[System.ComponentModel.Description("展开时高度")]
public int HeightWhenExpand
{
get
{
return _heightWhenExpand;
}
set
{
_heightWhenExpand = value;
}
}
/// <summary>
/// 展开时显示文字
/// </summary>
private string _descriptionWhenExpand = "收起";
///<summary>
/// 展开时显示文字
///</summary>
[System.ComponentModel.Description("展开时显示文字")]
public string DescriptionWhenExpand
{
get
{
return _descriptionWhenExpand;
}
set
{
_descriptionWhenExpand = value;
}
}
/// <summary>
/// 点击LinkLabel文字
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lnkHeightController_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
if (this.Parent != null)
{
int height = this.Parent.Height;
//根据父容器高度判断父容器应是收起还是展开
if (ControllerStatus == ControllerStatusEnum.FOLD)
{
Expand();
}
else
{
Fold();
}
}
}
}
}

使用此控件时,直接将此控件拖入要改变高度的Panel或其他容器即可。

使用前需要先在控件属性中设置好如下5项内容:

各属性说明如下:

1、ControllerStatus,是一个枚举,包含EXPAND和FOLD两种选择,决定窗体打开时查询条件是展开或是收起的。

2、DescriptionWhenExpand,当查询条件区域处于展开状态时,控制器展示的文字

3、DescriptionWhenFold,当查询条件区域处于收起状态时,控制器展示的文字

4、HeightWhenExpand,查询条件区域处于展开状态时高度

5、HeightWhenFold,查询条件区域处于收起状态时高度

HeightController控件使用效果如下:

收起时界面:

展开时界面:

DEMO程序下载地址:

链接: http://pan.baidu.com/s/1jHSvVee  密码: qfp7

以上所述是小编给大家介绍的使用C#语言实现的查询条件界面展开和收起功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c#实现展开收起
c chart控件使用、c 定时器的使用、c 获取cpu使用率、c 线程使用、dev c 使用教程,以便于您获取更多的相关知识。

时间: 2024-10-29 20:19:35

使用C#语言实现的查询条件界面展开和收起功能_C#教程的相关文章

c# 通过经纬度查询 具体的地址和区域名称_C#教程

最近项目需要通过经纬度查询 具体的地址和区域名称,通过查询网络资源,发现提供的大多是得到具体的地址而对区域或城市名称的获取就不是很好把握:在这里自己搞了个: 复制代码 代码如下: //webclient客户端对象 WebClient client = new WebClient(); string url = "http://maps.google.com/maps/api/geocode/xml?latlng=" + latitude + "," + longit

将界面查询条件通过java解析成sql语句

问题描述 将界面查询条件通过java解析成sql语句 新手求助,现在做一个东西,需要将界面查询的条件进行解析成sql条件,比如传进来的 条件为(!ewew&!1)&!ce|( wewe|测试) 和查询字段为content,那么得到的解析语句为 (( content not like '%ewew%' and content not like '%1%') and ( content not like '%ce%') or ( content like '% wewe%' or conten

jsf-【JSF/PrimeFaces】查询条件与查询结果两个panel隐藏与展示的问题

问题描述 [JSF/PrimeFaces]查询条件与查询结果两个panel隐藏与展示的问题 [环境]JSF2.2+PrimeFaces5[需求]查询功能实现: 用户进入查询界面,输入查询条件(大概有十几个,占了半个页面) 点击"查询"按钮后,进入查询结果页面 查询结果页面有一个"新查询"的按钮,点击可以清空之前的查询条件,回到查询页面 [实现]我用了一个页面来展示查询条件和查询结果,点击查询按钮时,隐藏查询条件panel,显示查询结果panel:点击"新查

【SSH项目实战】国税协同平台-25.查询条件回显

我们上次完成了信息发布管理模块的条件查询功能,但是我们有一些问题没有解决,比如信息的"回显"功能. 解释一下回显,例如你翻到100页,这一页有一个信息需要修改,当你点击修改并修改完毕的时候,发现并没有回到之前的第100页,而是回到了第1页!!你是不是就抓狂了?而且你在输入框中的的查询条件也可能改变或消失,这就是没有做数据回显的后果.所以,我们要为我们的这个模块做数据回显功能. 我们去分类查询的依据就是info.title值,如果有,我们就按照那个排序并列出结果,如果没有我们就去取所有的

ssh 查询条件怎么搞在线急求。。。。

问题描述 ssh 查询条件怎么搞在线急求.... 这是jsp界面dao层怎么写 解决方案 select * from user_info t where 1=1 if(name!=null){ and t.name=:name } if(sex!=null){ and t.sex=:sex } if(age!=null){ and t.age=:age } 解决方案二: 进行字符串的连接,例如: StringBuffer sb = new StringBuffer(); String usern

实现一个让用户自定义查询条件的查询用什么方法呢?

问题描述 实现一个让用户自定义查询条件的查询用什么方法呢? 解决方案 解决方案二:引用楼主yaoruimei的回复: 实现一个让用户自定义查询条件的查询用什么方法呢? 能说具体点吗?解决方案三:路过的表示没看懂什么意思解决方案四:例如:我们现在在做人事系统.涉及到人员的信息很多有姓名,性别等等.如果查询的时候可能不完全按所有条件查询需要用户自定义的选择人员属性中的几项进行查询.这个条件是用户自定义定的.例如按姓名查询:系统有一个地方出现姓名是等于什么或者包含什么,然后还可以针对这几个条件进行逻辑

类似(安居客、淘宝网),查询条件用链接,页面元素重新加载问题

问题描述 真诚向各位请教一个问题,我找了两天,也没有解决方案:asp.net,网站,为了seo优化,每个查询条件都是一个a标签链接,安居客.淘宝网,都是这样实现的,如:../suzhou/listst_-z1-a16.aspx这样,一个新链接,就是一个请求,那么所有的元素都要重新加载,要查询数据库的也要重新查,请问哪位有解决办法,或以前做过的,能给些提示.很感谢.我想用缓存,但元素都重新加载了,查询条件也要重新初始化,还要分析url传参,把选中的条件赋予样式,这样实现工作量.显示效果都不好.分不

asp.net 网页动态查询条件的实现_实用技巧

场景 最近有一个需求,会在 mongodb 中插入各种类型的数据,算是记录业务日志的数据库吧. 因为业务对象类型都不同,所以插入的数据格式也完全不同. 除此之外,还需要提供一个查询界面,可以搜索数据. 插入数据没任何问题,但是查询就- 查询设计方案 首先想到的是让用户直接输入 mongodb 查询语法,类似 json 格式.但是使用者虽然也是开发,可都不熟悉这个语法,所以放弃了. 第二个想法是让用户输入 SQL 语句,然后转换- 结果以失败而告终. 最后,看到了 iTunes 智能播放列表的交互

代码生成工具之Winform查询列表界面生成

在上面一篇随笔<代码生成工具之界面快速生成>介绍了代码生成工具Database2Sharp的界面生成操作,其中介绍了Web界面(包括列表界面.内容显示.内容编辑界面的生成,另外还介绍了Winform界面的内容编辑界面的生成,本篇主要继续介绍Winform界面生成中的查询列表界面的操作展示等信息. 基于Winform的界面生成,配合我的Winform开发框架,提供了三种不同的界面生成,包括传统界面样式.DotNetBar界面样式和DevExpress界面样式的代码生成,这几种界面是目前Winfo