服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - 使用C#语言实现的查询条件界面展开和收起功能

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

2021-12-10 14:22北风其凉 C#

这篇文章主要介绍了使用C#语言实现的查询条件界面展开和收起功能的完美解决方案,需要的朋友可以参考下

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

收起时界面:

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

展开时界面:

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

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

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

c#代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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,界面如下:

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

自定义控件中只包含一个linklabel,autosize属性被设置为false,dock属性被设置为full,textalign属性被设置为middleleft。

c#代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
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或其他容器即可。

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

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

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

各属性说明如下:

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

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

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

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

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

heightcontroller控件使用效果如下:

收起时界面:

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

展开时界面:

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

demo程序下载地址:

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

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

原文链接:https://my.oschina.net/Tsybius2014/blog/791349?utm_source=tuicool&utm_medium=referral

延伸 · 阅读

精彩推荐
  • C#深入理解C#的数组

    深入理解C#的数组

    本篇文章主要介绍了C#的数组,数组是一种数据结构,详细的介绍了数组的声明和访问等,有兴趣的可以了解一下。...

    佳园9492021-12-10
  • C#C#设计模式之Strategy策略模式解决007大破密码危机问题示例

    C#设计模式之Strategy策略模式解决007大破密码危机问题示例

    这篇文章主要介绍了C#设计模式之Strategy策略模式解决007大破密码危机问题,简单描述了策略模式的定义并结合加密解密算法实例分析了C#策略模式的具体使用...

    GhostRider10972022-01-21
  • C#如何使用C#将Tensorflow训练的.pb文件用在生产环境详解

    如何使用C#将Tensorflow训练的.pb文件用在生产环境详解

    这篇文章主要给大家介绍了关于如何使用C#将Tensorflow训练的.pb文件用在生产环境的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴...

    bbird201811792022-03-05
  • C#VS2012 程序打包部署图文详解

    VS2012 程序打包部署图文详解

    VS2012虽然没有集成打包工具,但它为我们提供了下载的端口,需要我们手动安装一个插件InstallShield。网上有很多第三方的打包工具,但为什么偏要使用微软...

    张信秀7712021-12-15
  • C#三十分钟快速掌握C# 6.0知识点

    三十分钟快速掌握C# 6.0知识点

    这篇文章主要介绍了C# 6.0的相关知识点,文中介绍的非常详细,通过这篇文字可以让大家在三十分钟内快速的掌握C# 6.0,需要的朋友可以参考借鉴,下面来...

    雨夜潇湘8272021-12-28
  • C#C#微信公众号与订阅号接口开发示例代码

    C#微信公众号与订阅号接口开发示例代码

    这篇文章主要介绍了C#微信公众号与订阅号接口开发示例代码,结合实例形式简单分析了C#针对微信接口的调用与处理技巧,需要的朋友可以参考下...

    smartsmile20127762021-11-25
  • C#利用C#实现网络爬虫

    利用C#实现网络爬虫

    这篇文章主要介绍了利用C#实现网络爬虫,完整的介绍了C#实现网络爬虫详细过程,感兴趣的小伙伴们可以参考一下...

    C#教程网11852021-11-16
  • C#SQLite在C#中的安装与操作技巧

    SQLite在C#中的安装与操作技巧

    SQLite,是一款轻型的数据库,用于本地的数据储存。其优点有很多,下面通过本文给大家介绍SQLite在C#中的安装与操作技巧,感兴趣的的朋友参考下吧...

    蓝曈魅11162022-01-20