Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2011, 16:49   #1
KobolD
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 239
По умолчанию Заполнение листбокса из своего класса

Ситуация такая: Создаю форму, добавляю на нее кнопочку и листбокс.
при нажати на кнопку у меня должен создаваться объект моего класса, производить вычисления, а результат выводить в тот самый листбокс. Вот только я немогу понять как бы так организовать это дело т.к. мой класс ни прокакой листбокс не знает. Что мне надо для этого дописать?

P.S. Листбокс использую потому что хочу выводить еще результаты промежуточных вычислений. Хочется чтобы в классе была некая функция типа SendText(string Arg) при вызове которой в листбокс добавлялась строка Arg.

Если поможет то вод упрощенный код кнопки и функции:

Код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
    {

    private void btnConnect_Click(object sender, EventArgs e)//Кнопка подключить
    {
        SendReport("Начало программы");//Добавление строки в листбокс, все работает.
        Functions Amplitude = new Functions();
        Amplitude.Summa();
    }
    public void SendReport(string theItem)//Вот функция которая добавляет строку в листбокс, но она не работает при вызове из класса.
    {
        if (String.IsNullOrEmpty(theItem))
        {
            listReport.Items.Clear();//Очищаем если пустая строка
        }
        else
        {
            listReport.Items.Add(theItem);//добавляем строку
            listReport.SelectedIndex = listReport.Items.Count - 1;//выделяем последнюю строчку (автопромотка)
        }
    }

    public class Functions
    {
        int Y;
        public Functions()
        {
            //тут идет  вычисление
            Y =7;
        }
        public void Summa()
        {
            Y += 3;
            SendReport(Y.ToString());//вот в этом месте надо вывести первый результат
        }

    }
    }
}
Я подозреваю что как то надо передать ссылку на листбокс в мой объект, но незнаю как.
Чтобы слова не расходились с делом, нужно молчать и ничего не делать.
KobolD вне форума Ответить с цитированием
Старый 25.04.2011, 18:02   #2
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Есть 2 варианта:
1. сделать чтобы метод Summa возвращал значение
Код:
public int Summa()
{
Y += 3;
return Y;            
}
ну и само собой выводим результат:
Код:
private void btnConnect_Click(object sender, EventArgs e)//Кнопка подключить
    {
        SendReport("Начало программы");//Добавление строки в листбокс, все работает.
        Functions Amplitude = new Functions();
        SendReport(Amplitude.Summa().ToString());
    }
2. использовать события. Поищи на форуме, не раз давал ссылки на полезные статьи
Hollander вне форума Ответить с цитированием
Старый 26.04.2011, 10:10   #3
KobolD
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 239
По умолчанию

Начал разбираться с событиями и наткнулся на пример с делегатом, решил делать через него.
Код получился рабочий, но меня терзают сомнения по поводу правильности логики передачи ссылки..
Код:
namespace WindowsFormsApplication1
{
    public delegate void myReport(string theItem);//Делегат для лога
    public partial class Form1 : Form
    {

        private void btnConnect_Click(object sender, EventArgs e)//Кнопка подключить
        {
            SendReport("Начало программы");//Добавление строки в листбокс, все работает.
            Functions Amplitude = new Functions(new myReport(SendReport));//передаю делегат в конструктор
            Amplitude.Summa();
        }
        public void SendReport(string theItem)//Вот функция которая добавляет строку в листбокс, но она не работает при вызове из класса.
        {
            if (String.IsNullOrEmpty(theItem))
            {
                listReport.Items.Clear();//Очищаем если пустая строка
            }
            else
            {
                listReport.Items.Add(theItem);//добавляем строку
                listReport.SelectedIndex = listReport.Items.Count - 1;//выделяем последнюю строчку (автопромотка)
            }
        }

        public class Functions
        {
            int Y;
            myReport ReportDelegate;//переменная хранит делегат фнкции вывода сообщения
            public Functions(myReport ReportDelegate)
            {
                this.ReportDelegate = ReportDelegate;
                //тут идет  вычисление
                Y = 7;
            }
            public void Summa()
            {
                Y += 3;
                ReportDelegate(Y.ToString());//вот в этом месте надо вывести первый результат
            }

        }
    }
}
Чтобы слова не расходились с делом, нужно молчать и ничего не делать.
KobolD вне форума Ответить с цитированием
Старый 26.04.2011, 15:30   #4
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Как вариант.
Но лично я бы сделал следующее: создал в Functions событие (event). После того как создал объект этого класса подписался бы на событие.
Единственное возникает вопрос: нужно ли все это, если работа идет в одном потоке, то смысла использовать события или делегаты - нету, проще сделать как я сразу написал.
Hollander вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание своего класса на основе базового TControl Lich87 Общие вопросы C/C++ 1 22.06.2010 18:29
Сохранение обьекта своего класса joker815 Помощь студентам 0 19.05.2010 17:59
Заполнение значений листбокса Иванов_ДМ Microsoft Office Excel 7 29.05.2009 23:01
Создание своего класса, наследование от предка Krechet Общие вопросы Delphi 16 02.05.2009 16:15
Создание своего класса AlexandrSid Общие вопросы Delphi 3 19.05.2008 13:28