отображение текста в текстовом поле в Visual c#

#c# #winforms

#c# #winforms

Вопрос:

Я получаю информацию из массива и отображаю результаты в текстовом поле в форме. Значение не отображается в пользовательском интерфейсе, но в нем указано, что ему присвоено значение.

 try
{
    foreach (string r in Rows)
    {
        string[] h = new string[5];
        h = r.Split(',');
        MessageBox.Show(h[0]);
        // need to show the first record
        House newhouse = new House();

        newhouse.ID = Convert.ToInt32(h[0]);
        newhouse.Address = Convert.ToString(h[1]);
        newhouse.Type = Convert.ToChar(h[2]);
        newhouse.Cost = Convert.ToInt32(h[3]);
        newhouse.Sold = Convert.ToString(h[4]);

        loadedHouses.Add(newhouse);

        ID_Number.Text = Convert.ToString(h[0]);
        address1.Text = Convert.ToString("g");
        type1.Text = Convert.ToString(h[2]);
        cost1.Text = Convert.ToString(h[3]);
        sold1.Text = Convert.ToString(h[4]);
        MessageBox.Show("dewdwedw");
    }
}
catch (Exception qq)
{
    Console.WriteLine("{0} Exception caught.", qq);
}
  

При наведении курсора ID_Number мыши во время отладки сообщается, что значение должно быть равно 1, но оно не отображается в форме. Кто-нибудь может помочь?

Комментарии:

1. В этом коде нет ничего плохого, поэтому должно быть что-то еще, что неправильно. Можете ли вы показать больше кода?

2. Что такое h и какова ценность h[0] ?

3. Что произойдет, если вы измените код на ID_Number. Текст = «Привет»;

4. Вероятно, было бы гораздо полезнее и продуктивнее, если бы вы могли показать нам больше своего кода.

5. Это классический признак использования неправильного экземпляра формы. Добавьте это утверждение: this. Показать();

Ответ №1:

Попробуйте это…

     private void button1_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < 100000; i  )
        {
            textBox1.Text = i.ToString();
        }
    }
  

Можно догадаться, что здесь происходит. Числа в текстовых полях будут отображать текст от 0 до 999. Верно? Неправильно…вывод будет равен всего 999 в конце цикла.

Я не эксперт, и я пытаюсь изучить C #. Но я знаю, что этот код будет работать так, как я говорю. Возможно, вам придется сделать это в отдельном потоке. Попробуйте это…

     private void button1_Click(object sender, EventArgs e)
    {
        Thread t = new Thread(new ThreadStart(loop));
        t.Start();
    }

    private void loop()
    {
        for (int i = 0; i < 100000; i  )
        {
            textBox1.Text = i.ToString();
        }
    }
  

Этот код должен работать так, как вы ожидаете.

В первом случае также текстовое поле непрерывно получает значения из цикла, но не может отобразить его, поскольку основной поток уже занят. Но во втором случае поток отделен от основного потока.

Я не уверен, что это ваша проблема, но мне так кажется. Текст присваивается текстовым полям непрерывно в цикле. Таким образом, несмотря на то, что текстовые поля имеют значения, но НЕ МОГУТ ОТОБРАЖАТЬСЯ. Если вы попытаетесь создать новый поток, теперь также текстовые поля будут иметь значения, но теперь они будут видны в текстовых полях. Это своего рода псевдокод, просто чтобы объяснить мою точку зрения. Если вы ищете то же самое, все в порядке. в противном случае бросьте камень мне в голову.

Надеюсь, это поможет.