收集巧用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组件进行操作。


总结:

大家可以看到在演示程序里,对组件进行操作时,没有用到变量名就可以完成操作。

猜你喜欢

转载自blog.csdn.net/Viccj/article/details/106250397