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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Timer и объекты формы 
:(
    Опции темы
Валерия
Дата 19.12.2007, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

using System;
using System.Windows.Forms;
using t = System.Threading;

namespace doroga
{
    public partial class Form1 : Form
    {
        static int x = 0;
        static int y = 0;
        public Form1()
        {
            InitializeComponent();

            t.Timer tmr = new t.Timer(test, "testing...", 1000, 1000);

        }

        static void test(object data)
        {
            button1.Location = new System.Drawing.Point(++x, ++y);
        }

    }
}


Вот такое выдает:
Код

An object reference is required for the nonstatic field, method, or property 'doroga.Form1.button1'


Т.е нужно что бы кнопка была static
А если я её делаю статик, то выдает много:
Код

Static member 'doroga.Form1.button1' cannot be accessed with an instance reference; qualify it with a type name instead    


Добавлено через 1 минуту и 22 секунды
Собственно мне нужно что бы кнопка двигалась каждую секунду smile

Добавлено через 9 минут и 12 секунд
Разобралась. Нада не делать test статическим.
Но теперь выкидывает ошибку отладчик:
Cross-thread operation not valid: Control 'button1' accessed from a thread other than the thread it was created on.
PM MAIL   Вверх
mr.DUDA
Дата 19.12.2007, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Цитата(Валерия @  19.12.2007,  20:23 Найти цитируемый пост)
Cross-thread operation not valid: Control 'button1' accessed from a thread other than the thread it was created on.

Юзать не System.Threading.Timer а System.Windows.Forms.Timer, ИЛИ делать так:
Код
        void test(object data)
        {
            this.Invoke(new MethodInvoker(delegate()
            {
                   button1.Location = new System.Drawing.Point(++x, ++y);
            }));
        }


P.S. вопрос про потоки и WinForms уже тыщу раз поднимался...


--------------------
user posted image
PM MAIL WWW   Вверх
Валерия
Дата 19.12.2007, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо, работает smile
Но заметила еще одну проблему.
Вообще я делаю cветoфор smile
Так вот, "mашинка" только до 225 едет, а потом просто вырубаются все таймеры и всё замирает (не зависает)
Код

using System;
using System.Windows.Forms;
using t = System.Threading;

namespace doroga
{
    public partial class Form1 : Form
    {
        static int x = 0;
        static int s = 0;
        public Form1()
        {
            InitializeComponent();

            t.Timer car = new t.Timer(gocar, "test", 0, 40);
            t.Timer svet = new t.Timer(gosvet, "", 0, 4000);

        }

        void gosvet(object data)
        {
            if (s == 0)
            {
                button3.Text = "K";
                s = 1;
            }
            else
            {
                button3.Text = "З";
                s = 0;
            }
        }

        void gocar(object data)
        {
            if (x == 200 && s == 1) { }
            else
            {

                this.Invoke(new MethodInvoker(delegate()
                {
                button1.Location = new System.Drawing.Point(++x, 0);
                textBox1.Text = x.ToString();
                }));
                
                
            }


        }

    }
}

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


Опытный
**


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

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



Да и в консольном приложении - таймер работает до поры до времени, а потом просто вырубаеться
PM MAIL   Вверх
Валерия
Дата 19.12.2007, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Еще вопрос, если создать класс и с него попытаться обратиться к какомуто объекту формы - то вообще никак smile
PM MAIL   Вверх
mr.DUDA
Дата 20.12.2007, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



В gosvet тоже нужен Invoke. И снова вопрос, почему бы просто не перетянуть на форму Timer с тулбокса, выставить Enabled=true и подписаться на Tick? Ведь проще же, и гемора с Invoke не нужно.

Цитата(Валерия @  19.12.2007,  22:01 Найти цитируемый пост)
Еще вопрос, если создать класс и с него попытаться обратиться к какомуто объекту формы - то вообще никак 

В свойствах объектов формы (кнопок и т.п.) выставить Modifier = Public.


Модератор: Пожалуйста, один топик - один вопрос.



--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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