Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Вызов методов объекта в обработчиках кнопок


Автор: Modul 31.5.2007, 11:22
Посоветуйте, как правильнее (или лучше) вызвать две функции объекта с 
в разных обработчиках кнопок.

Функция mes2() из класса Class использует результат функции mes1().

Код

namespace WindowsApplication_Test
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }

        Class c = new Class();

        private void button1_Click(object sender, EventArgs e)
        {
            c.mes1();            
        }

        private void button2_Click(object sender, EventArgs e)
        {
            c.mes2(this);            
        }
    }
}


Код

namespace WindowsApplication_Test
{
    public class Class
    {
        
        private int i;
        
        public Class(){}

        // Функция mes1() использует результаты mes2()
        public void mes1()
        {
            MessageBox.Show(i.ToString());
        }

        // Функция mes2() выполняется первой
        public void mes2(Form1 form1)
        {
            i++;
            form1.label1.Text = i.ToString();
        }
    }
}



Хотел передать ссылку в конструктор - ругается.
Class c = new Class(this);
Сделал через ссылку на Form1 в функции mes2() - работает.

Вопросы: 
1) Можно ли иначе это сделать ?
2) Правильно ли я сделал ?

Автор: tol05 31.5.2007, 13:42
Ругается - и правильно делает!
Ты же пытался передать this до вызова конструктора формы, а там его еще нет. Статическая инициализация, однако smile

А так - нормально. 
Хотя так как ты хотел - лучше, ИМХО
Код

namespace WindowsApplication_Test
{
    public partial class Form1 : Form
    {
        Class c;

        public Form1()
        {
            InitializeComponent();
            c = new Class(this);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            c.mes1();            
        }

        private void button2_Click(object sender, EventArgs e)
        {
            c.mes2();            
        }
    }
}

public class Class
    {
        
        private int i;
        Form1 form;
        
        public Class(Form1 form1)
       {
           form = form1;
       }

        // Функция mes1() использует результаты mes2()
        public void mes1()
        {
            MessageBox.Show(i.ToString());
        }

        // Функция mes2() выполняется первой
        public void mes2()
        {
            i++;
            form.label1.Text = i.ToString();
        }
    }



НЕ ТЕСТИЛ! Могу ошибаться.

Автор: Modul 31.5.2007, 14:18
В том-то и дело, что такой вариант я пробовал.

Код

Class c;

        public Form1()
        {
            InitializeComponent();
            c = new Class(this);
            
        }    


Наверное, перегрелся , тфу... smile 
Клемануло.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)