欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

收集巧用2个c#程序-关于哈希表和容器的

程序员文章站 2024-02-22 10:09:40
...

本文主要介绍在编写C#程序中的哈希表和容器的妙用。这两个妙用目的都是增加抽象,减少重复代码和因为对象不同造成的逻辑一样,代码不同。


 

零 ,上代码:

    代码功能:按按钮计数器加一,进度条增加.

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


总结:

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

相关标签: 上位机