Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как обратиться к компоненту из класса? обращение из класса к компоненту 
:(
    Опции темы
Iskin
Дата 19.11.2008, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 6.7.2008

Репутация: нет
Всего: нет



Помогите чайнику! Пытаюсь освоить ООП - возник такой вот вопрос:
Есть форма на которой есть Button и label.
Есть класс Program.

Хочу нажимая кнопку - вызвать метод класса Program. В этом методе указано что написать в label. 
Знаю, что есть способ вот такой:
Код

Program mypr = new Program();
label1.Text = mypr.Write();


где метод Write описан в классе Program:
Код

class Program
{
   public string Write()
   {
      return "HELLO";
   }
}


Но я хочу чтобы в методе Write было чётко написано: label1.Text = "HELLO";
Но MSVS ругается: The name 'label1' does not exist in the current context    

Как выбраться из этой ситуации подскажите пожалуйста!

PM MAIL   Вверх
diadiavova
Дата 19.11.2008, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Если label1 находится на форме form1, то вот так 

form1.label1

Правда label1, должен иметь модификатор как минимум internal, потомучто private не видно за пределами класса


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Alfmaster
Дата 19.11.2008, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 20.9.2008

Репутация: нет
Всего: нет



Нужно чтобы label1 был public

Код

public class с
    {
        public void write(object sender)
        {
            Form1 f = sender as Form1;
            f.button1.Text = "HHH";
        }
    }



Код

 private void button1_Click(object sender, EventArgs e)
        {
            c C = new c();
            C.write(this);

        }




А вообще не стоит обращаться к компонентам из вне класса формы...
PM MAIL   Вверх
diadiavova
Дата 19.11.2008, 01:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Если из другой сборки, то ессно public, а если сборка одна, то internal вполне достаточно. public поля - плёха, осинь плёха smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
SpaceSpace
Дата 19.11.2008, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 10.4.2007
Где: Самара

Репутация: нет
Всего: 10



можно : передавать не форму а сам лэйбл в класс.
Код

    public class Class1
    {
        public void Write(Label label)
        {
            label.Text = "Hello";
        }   
    }


а на форме
        private void button1_Click(object sender, EventArgs e)
        {
            Class1 c = new Class1();
            c.Write(this.label1);
        }


причем класс может находится в соседней библиотеке, и лэйбл будет приватным.
минус в том что эта библиотека будет поключена к System.Windows.Forms

Это сообщение отредактировал(а) SpaceSpace - 19.11.2008, 14:14


--------------------
Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение.
70-565
MCPD Enterprise 3.5 
PM MAIL   Вверх
diadiavova
Дата 19.11.2008, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Да так то оно так, только ведь в этом случае всё равно метод прийдётся из формы вызывать, и ек тому же передавать ему лэйбл, а он по ходу как раз этого и не хочет делать. Тут если речь идёт о другой сборке лучше всего сделать так:

В форме создаём текстовое свойство (например Caption)
Код

        public string Caption
        {
            get 
            {
                return label1.Text;
            }
            set
            {
                label1.Text=value;
            }

        }


 а из класса можно передавать этому свойству значение и оно будет вставляться в лэйбл. 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0454 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.