使用C#語言實現的查詢條件介面展開和收合功能_C#教程

來源:互聯網
上載者:User

先簡單說一下應用情境,現有一個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#語言實現的查詢條件介面展開和收合功能,希望對大家有所協助,如果大家有任何疑問請給我留言,小編會及時回複大家的。在此也非常感謝大家對雲棲社區網站的支援!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.