Использование метода для управления элементом управления в WinForms - PullRequest
1 голос
/ 03 сентября 2010

Я использую один и тот же код для заполнения элемента управления в моих WinForms снова и снова, поэтому я подумал: эй, ты должен сделать это методом, а не копировать его!

Итак, я создал это в своем Main классе

Главная

internal static void FillWithStuff(RichTextBox box)
{
 Data data = GetSomeData("doesn't matter");
 foreach (Row row in data)
 {
  box.Text += row.ToString() + "\r\n";
 }
}

WinForm

internal RichTextBox textBox = new RichTextBox();
// Some code
Main.FillWithStuff(textBox);

Итак, метод выполняется без исключений и предупреждений, но данные не заполняются в поле. Я проверил, были ли загружены данные, и это так, поэтому проблема должна быть где-то еще.

Как мне правильно это реализовать?

Ответы [ 3 ]

1 голос
/ 03 сентября 2010
using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private List<string> GetStuff()
        {
            List<string> stuff = new List<string>();

            stuff.Add("foo");
            stuff.Add("bar");
            stuff.Add("baz");

            return stuff;
        }

        private void FillWithStuff(TextBoxBase textBox)
        {
            List<string> stuff = GetStuff();

            foreach (string s in stuff)
            {
                textBox.Text += s + "\r\n";
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            FillWithStuff(richTextBox1);
        }
    }
}

Это работает так, как вы ожидаете. Сравнение с тем, что у вас есть, заставляет меня думать, что у вас есть проблема где-то еще. Вы уверены, что row.ToString() возвращает непустую строку?

0 голосов
/ 05 сентября 2010

Можете ли вы вставить весь код для Winform?

Из того, что я могу сказать, это переменная уровня формы, поскольку она помечена как внутренняя.

Я проверил это с помощью формы, которая былауже в форме, а также в динамически создаваемом, и оба раза он заполнял RichTextBox текстом, как и ожидалось.

Попробуйте установить точку останова в цикле foreach и убедитесь, что он возвращает данные.

0 голосов
/ 03 сентября 2010

Вы вызывали Main.FillWithStuff (...) после чего-то вроде Application.Run (form) или form.ShowDialog ()? В этом случае Main.FillWithStuff (..) не будет выполняться, пока вы не закроете форму, попробуйте переместить вызов метода до ее

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