Member 14530150 Ответов: 2

Как хранить данные из массива в сгенерированных метках?


Привет, ребята!
Это мой первый вопрос здесь, в codeproject, так что, пожалуйста, будьте добры со мной.


Я написал метод, который создает метки в соответствии с количеством строк внутри текстового файла.

public void floorName()
        {
            int numOfLines = File.ReadAllLines(@"C:\NoosApp\Details\Details.txt").Length;
            for (int i = 0; i < numOfLines; i++)
            {
                System.Windows.Forms.Label lbl = new System.Windows.Forms.Label();
                this.Controls.Add(lbl);
                lbl.Top = B * 58;
                lbl.Left = 1400;
                lbl.Width = 350;
                lbl.Height = 50;
                lbl.AutoSize = false;
                lbl.TextAlign = ContentAlignment.MiddleRight;
                lbl.Text = "" + this.B.ToString();
                lbl.ForeColor = Color.Black;
                lbl.Font = new Font("Fb reforma", 36);
                lbl.BackColor = Color.White;
                B = B + 1;
            }


И это прекрасно работает.
И мне также удалось получить данные из текстового файла построчно в массив, как это >>
string [] lines = File.ReadAllLines(@"C:\NoosApp\Details\floor.txt");


Что я уже пробовал:

Но я попытался сохранить данные в каждой метке, которую метод создал в приведенном выше коде, без какого-либо успеха.

Пожалуйста, помогите мне, я новичок в C#
Спасибо

2 Ответов

Рейтинг:
1

BillWoodruff

Это должно дать вам некоторые идеи:

// required
using System;
using System.IO;
using System.Windows.Forms;

// in some class
public void CreateLabelsFromFile(string filepath)
{
    if(! File.Exists(filePath))
    {
       throw new FileNotFoundError("invalid filepath");
    }
    
    try
    {
        Lines = File.ReadAllLines(filepath);
    }
    catch (Exception ex)
    {
        throw new IOException("can't read file: " + ex.Message);
    }

    int nlines = Lines.Length;

    if(nlines == 0)
    {
        throw new FileLoadException("empty file");
    }

    int vspace = 0;
    
    for (int i = 0; i < nlines ; i++)
    {
        // create the Label and configure it

        lbl.Text = Lines[i];
        
        vspace++;
    }
}
Чтение файлов часто подвержено ошибкам; вы всегда должны проверять, существует ли файл и/или существует ли каталог; всегда открывайте/читайте файл в блоке Try/Catch: могут возникнуть различные ошибки.

"Удобные" методы чтения файлов, такие как 'ReadAllLines, не требуют брекетинга метода в операторе 'using, как это делают другие методы файлов.

Видеть: [^]


Рейтинг:
1

Maciej Los

Если вы хотите получить данные из текстового файла и отобразить их в виде меток, вы должны прочитать их из массива строк.

Я немного изменил ваш код...

string [] lines = File.ReadAllLines(@"C:\NoosApp\Details\floor.txt");
int numOfLines = lines.Length;
for (int i = 0; i < numOfLines; i++)
{
    System.Windows.Forms.Label lbl = new System.Windows.Forms.Label();
    lbl.Top = i * 58;
    lbl.Left = 1400;
    lbl.Width = 350;
    lbl.Height = 50;
    lbl.AutoSize = false;
    lbl.TextAlign = ContentAlignment.MiddleRight;
    lbl.Name = "Label"  + i.ToString(); //add name to label
    lbl.Text = lines[i]; //display text from text file, specific line
    lbl.ForeColor = Color.Black;
    lbl.Font = new Font("Fb reforma", 36);
    lbl.BackColor = Color.White;
    this.Controls.Add(lbl);
}


Примечание №1: Вам не нужно читать текстовый файл дважды, чтобы получить количество строк и самих строк!
Примечание № 2: Вам не нужно [B] переменная, потому что вы можете использовать [i внутри for петля.

Пожалуйста, внимательно прочтите Решение №1 по Биллвудрафф[^], потому что он содержит несколько очень важных предложений.


BillWoodruff

"Вам не нужна переменная [B]"... и все же, вы используете его :)

Maciej Los

Ястребиный глаз. Спасибо, что указал на это, Билл.