收集巧用2个c#程序-关于哈希表和容器的
本文主要介绍在编写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;
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组件进行操作。
总结:
大家可以看到在演示程序里,对组件进行操作时,没有用到变量名就可以完成操作。
上一篇: 浅谈Spring的两种事务定义方式
下一篇: phpstudy升级Mysql的正确姿势
推荐阅读