本文主要介绍在编写C#程序中的哈希表和容器的妙用。这两个妙用目的都是增加抽象,减少重复代码和因为对象不同造成的逻辑一样,代码不同。
零 ,上代码:
代码功能:按按钮计数器加一,进度条增加.
[code]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;using System.Collections;namespace WFA_WB_UC_20200521_1{public partial class FormMain : Form{public FormMain(){InitializeComponent();}Hashtable _ht0 = null;/// <summary>/// 初始化进度条/// </summary>/// <param name=\"p\"></param>private void init_ProgressBar(ProgressBar p){if (p != null){p.Value = 0;p.Minimum = 0;p.Maximum = 10;}}/// <summary>/// 窗体初始化/// </summary>/// <param name=\"sender\"></param>/// <param name=\"e\"></param>private void FormMain_Load(object sender, EventArgs e){this._ht0 = new Hashtable();this._ht0.Add(this.button1, this.label1);this._ht0.Add(this.label1, this.progressBar1);foreach (Control ct0 in this.Controls)//遍历操作{System.Windows.Forms.ProgressBar p = ct0 as System.Windows.Forms.ProgressBar;init_ProgressBar(p);}foreach (Control ct0 in this.panel1.Controls)//遍历操作{System.Windows.Forms.ProgressBar p = ct0 as System.Windows.Forms.ProgressBar;init_ProgressBar(p);}}/// <summary>/// 标签里的数值加1/// </summary>/// <param name=\"l\"></param>private void addLabelNumer(Label l){l.Text = (int.Parse(l.Text) + 1).ToString();}/// <summary>/// 进度条增加/// </summary>/// <param name=\"p\"></param>private void addProgressBar(ProgressBar p){if (p.Value < p.Maximum){p.Value++;}else{p.Value = 1;}}/// <summary>/// 按钮1的双击事件/// 用于演示哈希表/// </summary>/// <param name=\"sender\"></param>/// <param name=\"e\"></param>private void button1_Click(object sender, EventArgs e){Label l = (Label)this._ht0[(Button)sender];addLabelNumer(l);ProgressBar p=(System.Windows.Forms.ProgressBar) this._ht0[l];addProgressBar(p);}/// <summary>/// 按钮2的双击事件/// 用于演示容器的遍历/// </summary>/// <param name=\"sender\"></param>/// <param name=\"e\"></param>private void button2_Click(object sender, EventArgs e){foreach (Control ct0 in this.panel1.Controls)//遍历操作{Label l = ct0 as System.Windows.Forms.Label;if (l != null){addLabelNumer(l);foreach (Control ct1 in this.panel1.Controls)//遍历操作{System.Windows.Forms.ProgressBar p = ct1 as System.Windows.Forms.ProgressBar;if (p != null){addProgressBar(p);}}}}}}}
一 ,哈希表的妙用:
使两个对象建立联系,即一个对象可以找到另一个对象。应用于一个对象改变时影响另一个在不指名道姓(指定对象名)的对象。
哈希表初始化:关联按钮与标签,标签与进度条。
this._ht0 = new Hashtable();
this._ht0.Add(this.button1, this.label1);
this._ht0.Add(this.label1, this.progressBar1);
在按钮双击事件中:直接用哈希表关联找到要操作的组件对象。
Label l = (Label)this._ht0[(Button)sender];
ProgressBar p=(System.Windows.Forms.ProgressBar) this._ht0[l];
二,容器的妙用:
容器使组件对象在窗体里不在是偏平化的存在,而是树形结构组织了。这样做有利于统一抽象操作,比如一个容器的所有的进度条都增加。
首先在界面中,把button2,label2,progressBar2这3个组件都添加到panel1中。
然后在按钮双击事件中,在panel1遍历查找Label组件和ProgressBar组件进行操作。
总结:
大家可以看到在演示程序里,对组件进行操作时,没有用到变量名就可以完成操作。