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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2012, 22:03   #1
gramp
Пользователь
 
Регистрация: 26.12.2010
Сообщений: 85
По умолчанию Можно ли объявить контрол статиком?

Подскажите, пожалуйста!

1. Из статической функции чтото сделать с контролом, например, с лабел, не получается. Как вариант решения - необходимо обращаться к контролу только не из статик функции либо каким-то образом можно объявить контрол статиком? Либо все-таки есть способ обратиться к контролу из статик функции?

2. Если программа проста и вся пишется внутри классе формы, то правильно ли я понимаю, что статики использовать бессмысленно, так как статики необходимы только для прямого обращения к статик функциям из другого класса без создания экземпляра этого класса? Или есть еще какой-то смысл использовать статики даже если весь код - в одном классе?

Заранее благодарю за совет.
gramp вне форума Ответить с цитированием
Старый 22.02.2012, 22:21   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

статик это по сути аналог рядовых функций из других ЯП(например С++)
просто они не валяються в глобальном пространстве имен, а привязаны к классу(который обычно привязан к пространству имен)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 22.02.2012, 23:04   #3
gramp
Пользователь
 
Регистрация: 26.12.2010
Сообщений: 85
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
статик это по сути аналог рядовых функций из других ЯП(например С++)
просто они не валяються в глобальном пространстве имен, а привязаны к классу(который обычно привязан к пространству имен)
Благодарю за ответ, но, к сожалению, уровень моих знаний о программировании не дает мне возможность в Вашем ответе увидеть ответы на мои вопросы. Если Вам не сложно, ответьте подробнее, пожалуйста.
gramp вне форума Ответить с цитированием
Старый 22.02.2012, 23:09   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

1)передавайте в ваш статичекий метод контрол с которым она чтото должна сделать
или же подумайте, а нужен ли статический метод там(если это например метод формы самой)
2)статические данные это данные общие для всех экземпляров класса.
статические методы нужны только тогда когда им не нужен this(экземпляр этого класса)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.02.2012, 00:00   #5
gramp
Пользователь
 
Регистрация: 26.12.2010
Сообщений: 85
По умолчанию

Код:
static void Set1(string text)
        {
            Action A = new Action(() =>
            {
                //Выполняемое действие
                this.label1.Text = text;
            });

            if (label1.InvokeRequired)
                this.BeginInvoke(A);
            else A();
        }
А можете ли показать на примере - как можно обратиться к контролу label1 внутри метода статика? В приведенном мной виде студио пишет про ошибку.
Убрать статик я могу, тогда ошибки нет, но мне для себя любопытно понять, как можно обратиться к контролу внутри статик метода.
gramp вне форума Ответить с цитированием
Старый 23.02.2012, 00:03   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

то что вам нужен this уже значит что метод не должен быть статическим.

только я не помню название класса от label
Код:
static void Set1(Label label, string text)
        {
            Action A = new Action(() =>
            {
                //Выполняемое действие
                label.Text = text;
            });

            if (label.InvokeRequired)
                label.BeginInvoke(A);
            else A();
        }
примерно так.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.02.2012, 00:23   #7
gramp
Пользователь
 
Регистрация: 26.12.2010
Сообщений: 85
По умолчанию

спасибо, так перестало ошибку показывать. )
и, если не затруднит, подскажите, как правильно вот через это с одним параметром:
Код:
Work("update");
запустить вот это
Код:
static void Work(string e1)
        {
            Set1(e1);
        }
label надо вписать, но как его вписать правильно, не знаю
gramp вне форума Ответить с цитированием
Старый 23.02.2012, 00:26   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в Work так же вписать Label в параметр который передать уже Setl.
кстати не вижу смысла в такой Work(и её можно сделать не статической было)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.02.2012, 00:42   #9
gramp
Пользователь
 
Регистрация: 26.12.2010
Сообщений: 85
По умолчанию

да просто стало очень любопытно, как совмещаются статик методы и обращение к контролам )
попробовал вот так
Код:
static void Work(Label label1, string ee)
        {
            Set1(label1, ee);
        }

Work(label1,"update");// это внутри статик события
но выделенное красным студио подчеркивает и пишет, что ссылка объекта была затребована для нестатического свойства, метода или поля.
gramp вне форума Ответить с цитированием
Старый 23.02.2012, 00:45   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

интерес интересом, но через одно место делать не нужно.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Контрол nats C# (си шарп) 7 14.02.2012 14:49
двигаю контрол мышкой, почему мышка перемещается быстрее чем контрол PaulRom Microsoft Office Access 0 06.12.2011 11:19
Круглый Контрол coper Общие вопросы C/C++ 4 02.06.2010 18:59
Помогите с ifstream. Можно ли сначала объявить, а потом указать файл? TwiX Общие вопросы C/C++ 6 25.09.2009 22:54
контрол Maxxx 83 Помощь студентам 2 01.02.2009 14:08