Перейти к содержанию

C# передача переменной в label второго окна.


Рекомендуемые сообщения

Новый камень спотыкания это как передать переменную в Label второй формы.

Проблем тут несколько, ведь переменной значение присваивается в одном поток, ну и плюс ее нужно передать в Label второго окна.

Когда была 1 форма, то изменял Label так:

label3.Invoke(new Action(() => label3.Text = forwardspeed.ToString()));

Так вот как сделать, что бы сразу как присваивается значение переменной, то и менялся Label?

Пока что поиск в гугле не дал своих плодов.

С кулаками не бросаться, ведь я только учусь.

Ссылка на комментарий
Поделиться на другие сайты

ReWanet это все не то! Гуглится все отлично, но не то, что нужно.

X86Jumps Переменные есть, просто танцевал с бубном. А когда выкурил весь бамбук и решил вделать все просто, то получилось, но все равно не то пальто.

Такс, что есть на сейчас. Влипил я в форме 2 в инициализации лейбл

label5.Text = Form1.updownfreez.ToString();

Он выводит нужное содержимое переменной. НО!!! Но выводит только при запуске 2 окна. И не меняется при изменении переменной.

Теперь же мне нужно добиться, что бы если изменится переменная, к примеру с False на True, то в форме2 в лейбле было написано не False, а True.

Ссылка на комментарий
Поделиться на другие сайты

в начале не было про то что если меняется переменная, то меняется и в 2й форме

проще тогда как указатель на переменную делать и присвоить адрес нужной переменной

тогда что хочешь меняй

а выводит потому что как он при не видимой 2й форме тебе покажет что то?)))

Ссылка на комментарий
Поделиться на другие сайты

Какая то ересь происходит, походу пора идти спать... Приходится редактировать пост...

Сделал сейчас следующее, создал в форме 2 поток, который тупо обновляет лейбл. Получилось так:

Скрытый текст

public Form2()
        {            
            InitializeComponent();
            Thread potok = new Thread(MyThreade);
            potok.IsBackground = true;
            potok.Start();
        }

public void MyThreade()
        {
            while (Form1.flag2 == 1)
            {
                label5.Invoke(new Action(() => label5.Text = Form1.updownfreez.ToString()));
            }           
        }

 

Только вот беда, не получается теперь прервать поток если закрываю форму2... Либо я что то не то творю, либо реально пора спать...

Изменено пользователем pachela
Ссылка на комментарий
Поделиться на другие сайты

Зачем тебе поток? Описываешь делегат, по нему описываешь событие, сразу после изменения значения переменной вызываешь событие с передачей в него нового значения переменной. Во второй форме подписываешься на это событие, и в обработчике меняешь лейбл. И ноу проблем.

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, pachela сказал:

2 Xipho На костер тебя шамана! Из выше всего сказанного, я понял только половину =))). Приведи пример кода, нагляднее хоть будет.

А что там приводить? Объявляешь делегат. Объявляешь в нужном классе (где меняется переменная) нужное событие. В этом же классе вызываешь нужное событие сразу после изменения переменной. В классе формы, где нужно изменить лейбл, подписываешься на это событие (добавляешь обработчик). И в обработчике события обновляешь лейбл.

 

http://csharpindepth.com/Articles/Chapter2/Events.aspx

Ссылка на комментарий
Поделиться на другие сайты

Как передать данные из одной формы в другую. Описаны 7 способов передачи данных.

Самый простым способом является создание открытого класса и поля.

Изменено пользователем saiberpro
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

20 часов назад, saiberpro сказал:

Как передать данные из одной формы в другую. Описаны 7 способов передачи данных.

Самый простым способом является создание открытого класса и поля.

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

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.