[KPI] VB6.0 screen design item list output function. [C #]

14 minute read

In the case of VB6.0, as a result of repeated repairs from the past, items such as Frame overlapped, and it was unclear where and what items were hidden just by looking, so VB6.0 in C # Create a screen design decoding tool. Instead of a memorandum.
I don’t want to think that anyone needs this in the first place.

Below, source code
Prepare the following two

  1. Screen button function (event assumed by button name btnFunction1)
  2. Data class for decryption “VB Design Info”

Frm1.cs


        /// <summary>
        ///Function 1 button Click
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnFunction1_Click(object sender, EventArgs e)
        {
            try
            {
                string path = @"C:\Users\hogehoge\Desktop\"; //Describe the location of the file
                string[] sourceCode;
                using (StreamReader sr = new StreamReader(path + "text file.txt", Encoding.UTF8))
                {
                    string strData = sr.ReadToEnd();
                    sourceCode = strData.Replace("\n", string.Empty).Split('\r');
                }

                List<VBDesignInfo> listVB = new List<VBDesignInfo>();
                List<int>list hierarchy= new List<int>();
int i hierarchy= 0;
                int targetIndex = 0;

                for (int i = 0; i < sourceCode.Length; i++)
                {
                    if (CheckData(sourceCode[i], "Begin "))
                    {
                        listVB.Add(new VBDesignInfo());
                        targetIndex = listVB.Count - 1;

i hierarchy++;
                        if (listVB.Count <= 1 || listVB[targetIndex - 1].Hierarchical List.Count <=i hierarchy- 1)
                        {
list hierarchy.Add(1);
                        }
                        else
                        {
list hierarchy.Add(listVB[targetIndex - 1].Hierarchical List[i hierarchy- 1] + 1);
                        }

                        //Get class name and item name
                        string[] sourceWords = sourceCode[i].Trim().Substring(6).Split(' ');
                        listVB[targetIndex].SetData(VBDesignInfo.Item list.hierarchy, ihierarchy.ToString());
                        for (int j = 0; j <list hierarchy.Count; j++)
                        {
                            listVB[targetIndex].Hierarchical List.Add(int.Parse(list hierarchy[j].ToString()));
                        }
                        listVB[targetIndex].SetData(VBDesignInfo.Item list.ClassName, sourceWords[0]);
                        listVB[targetIndex].SetData(VBDesignInfo.Item list.Name, sourceWords[1]);

                        continue;
                    }

                    //When finished
                    if (sourceCode[i].Trim().Equals("End"))
                    {
i hierarchy--;
list hierarchy.RemoveAt(list hierarchy.Count - 1);
                        if (list hierarchy.Count > 0)
                        {
                            targetIndex = listVB.IndexOf(listVB.Where(a => CheckEqualsIntList(a.Hierarchical List,list hierarchy)).ToList()[0]);
                        }

                        continue;
                    }

                    //No hierarchy=No data
                    if (list hierarchy.Count <= 0)
                    {
                        continue;
                    }

                    //Remove all whitespace before and after the target line and two or more whitespaces, leaving only one whitespace.
                    string sourceWord = sourceCode[i].Trim();
                    while (true)
                    {
                        if (sourceWord.Replace("  ", " ").Equals(sourceWord))
                        {
                            break;
                        }
                        sourceWord = sourceWord.Replace("  ", " ");
                    }

                    //Get TabIndex
                    if (CheckData(sourceWord, "TabIndex ="))
                    {
                        listVB[targetIndex].SetData(VBDesignInfo.Item list.TabIndex, sourceWord.Substring(11));
                    }

                    //Get Index
                    if (CheckData(sourceWord, "Index ="))
                    {
                        listVB[targetIndex].SetData(VBDesignInfo.Item list.Index, sourceWord.Substring(8));
                    }

                    //Get Tag
                    if (CheckData(sourceWord, "Tag ="))
                    {
                        listVB[targetIndex].SetData(VBDesignInfo.Item list.Tag, sourceWord.Substring(6));
                    }

                    //Get Top
                    if (CheckData(sourceWord, "Top ="))
                    {
                        listVB[targetIndex].SetData(VBDesignInfo.Item list.Top, sourceWord.Substring(6));
                    }
                }

                //File output
                DateTime dtNow = DateTime.Now;
                string filePath = path + "text file_" + dtNow.ToString("yyyyMMdd_HHmmss") + ".csv";

                string titleText
                    = "Name" + ","
                    + "ClassName" + ","
                    + "Hierarchical list" + ","
                    + "hierarchy" + ","
                    + "TabIndex" + ","
                    + "Index" + ","
                    + "Tag" + ","
                    + "Top";
                File.AppendAllText(filePath, titleText + Environment.NewLine);

                for (int i = 0; i < listVB.Count; i++)
                {
                    string kaisou = string.Empty;
                    for (int j = 0; j < listVB[i].Hierarchical List.Count; j++)
                    {
                        if (!j.Equals(0))
                        {
                            kaisou += "-";
                        }
                        kaisou += listVB[i].Hierarchical List[j];
                    }

                    string appendText = string.Empty;
                    appendText
                        = listVB[i].Name + ","
                        + listVB[i].ClassName + ","
                        + kaisou + ","
                        + listVB[i].hierarchy+ ","
                        + listVB[i].TabIndex + ","
                        + listVB[i].Index + ","
                        + listVB[i].Tag + ","
                        + listVB[i].Top;
                    File.AppendAllText(filePath, appendText + Environment.NewLine);
                }

                MessageBox.Show("I did it");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private bool CheckData(string sourceCode, string targetWord)
        {
            int codeLength = targetWord.Length;
            return (sourceCode.Trim().Length > codeLength && sourceCode.Trim().Substring(0, codeLength).Equals(targetWord));
        }

        private bool CheckEqualsIntList(List<int> list1, List<int> list2)
        {
            //If either is NULL
            if (list1 == null || list2 == null)
            {
                return false;
            }

            //When the number of cases does not match
            if (!list1.Count.Equals(list2.Count))
            {
                return false;
            }

            //If the values do not match
            for (int i = 0; i < list1.Count; i++)
            {
                if (!list1[i].Equals(list2[i]))
                {
                    return false;
                }
            }

            return true;
        }

VBDesignInfo.cs


using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace Form
{
    /// <summary>
    ///VB design information
    /// </summary>
    public class VBDesignInfo
    {
        /// <summary>
        ///Item list
        /// </summary>
public enum item list
        {
hierarchy= 0,
            Name,
            ClassName,
            TabIndex,
            Index,
            Tag,
            Top,
            VBSourceList
        }

        /// <summary>
        ///hierarchy
        /// </summary>
public int hierarchy{ get; set; }

        /// <summary>
        ///Hierarchical list
        /// </summary>
        public List<int>Hierarchical List{ get; set; }

        /// <summary>
        ///item name
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        ///name of the class
        /// </summary>
        public string ClassName { get; set; }

        /// <summary>
        /// TabIndex
        ///Without-1 (default)
        /// </summary>
        public int TabIndex { get; set; }

        /// <summary>
        ///Index (VB array)
        ///Without-1 (default)
        /// </summary>
        public int Index { get; set; }

        /// <summary>
        /// Tag
        /// </summary>
        public string Tag { get; set; }

        /// <summary>
        /// Top
        /// </summary>
        public int Top { get; set; }

        /// <summary>
        ///constructor
        /// </summary>
        public VBDesignInfo()
        {
            this.Hierarchical List= new List<int>();
            this.TabIndex = -1;
            this.Index = -1;
        }

        public void SetData(Item list k list, string val)
        {
            try
            {
                switch(k list)
                {
case item list.hierarchy:
                        this.hierarchy= int.Parse(val.Trim());
                        break;
case item list.Name:
                        this.Name = val.Trim();
                        break;
case item list.ClassName:
                        this.ClassName = val.Trim();
                        break;
case item list.TabIndex:
                        this.TabIndex = int.Parse(val.Trim());
                        break;
case item list.Index:
                        this.Index = int.Parse(val.Trim());
                        break;
case item list.Top:
                        this.Top = int.Parse(val.Trim());
                        break;
case item list.Tag:
                        this.Tag = val.Trim();
                        break;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}

As a procedure, set the path “C: \ Users \ hogehoge \ Desktop " of the text file and the folder to output it in the variable path in the first source. (Change the value of the variable)
Get the value of the frm file of the VB6.0 screen you want to check. Open it with txt or something, and save the contents in the corresponding path with the name “text box.txt”.
When you run the function, a csv file will be created. In addition to Name, tag, and position property values, “hierarchical list” and “hierarchical” items are also output.
This will create a list of screen items in CSV.

In the “hierarchical list”, if the item is in the Frame, if the hierarchical list of the corresponding Frame is “1-2”, the items in the Frame are “1-2-1” and “1-2-2”. Set in order.
In the above case, the “hierarchy” is “2” for the frame hierarchy and “3” for the item hierarchy in the frame. Furthermore, if the Frame is inside, the hierarchy of the items in it will be “4”.