powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Почему не работает
19 сообщений из 19, страница 1 из 1
Почему не работает
    #38564841
FatherSql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
смысл есть синхронизация через переменную object. Вначале делал через бул тоже не работало подумал что не ссылочный тип, но через object тоже не работает. А вот если свой класс сделать с полем типа бул и передавать без всяких ref то работает.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
   public partial class Form1 : Form
    {
        object _stop = new object();

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            _stop = false;

            f = new Form2(ref _stop);
            f.Show();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            _stop = true;
        }
    }



        object _stop = null;


        public Form2(ref object stop)
        {
            InitializeComponent();

            _stop = stop;
        }


        private void timer1_Tick(object sender, EventArgs e)
        {
            if (_stop.Equals(true))
                Close();
        }
...
Рейтинг: 0 / 0
Почему не работает
    #38564854
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Формовую синхронизацию через события делать надо.

Ну а после
Код: c#
1.
object _stop = false;



в stop'e - не ссылочный тип.
...
Рейтинг: 0 / 0
Почему не работает
    #38564859
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_stop = stop;
тут копируется ссылка на значение stop, а не на поле stop класса Form1.
соответственно после _stop = true; значение поля в Form2 остается равным false/
...
Рейтинг: 0 / 0
Почему не работает
    #38564862
FatherSql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch_stop = stop;
тут копируется ссылка на значение stop, а не на поле stop класса Form1.
соответственно после _stop = true; значение поля в Form2 остается равным false/
ну а как сделать правыльно
...
Рейтинг: 0 / 0
Почему не работает
    #38564863
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallaris,

даже если будет ссылочный тип, при таком способе изменения значения поля _stop в Form1 для Form2 ничего не изменится
...
Рейтинг: 0 / 0
Почему не работает
    #38564864
FatherSql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch_stop = stop;
тут копируется ссылка на значение stop, а не на поле stop класса Form1.
соответственно после _stop = true; значение поля в Form2 остается равным false/
и почему со своим класом все прокатывает
...
Рейтинг: 0 / 0
Почему не работает
    #38564869
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FatherSql,

1) события
2) передать делегат, получающий значение _stop
3) сделать как то так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
public class StopSource
{
      public bool Stop {get; set;}
}

public class Form1 
{
    StopSource source = new StopSource();

    button1_click()
    {
         source.Stop = false; //нинужно по большому счету
         f = new Form2(source);
         f.Show();

    }

    button2_click()
    {
        source.Stop = true;
    }
}

public class Form2
{
     StopSource _source;

     Form2(StopSource source)
     {
          _source = source;
     }
     
     timer1_Tick()
     {
            if (_source.Stop)
                Close();
     }


} 
...
Рейтинг: 0 / 0
Почему не работает
    #38564873
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FatherSql,

со своим классом случайно получалось не потому, что вы меняли значение поля класса, а не новый экземпляр создавали?
...
Рейтинг: 0 / 0
Почему не работает
    #38564882
FatherSql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelouchFatherSql,

со своим классом случайно получалось не потому, что вы меняли значение поля класса, а не новый экземпляр создавали?
со своим класом различие только в имени класса и обращении к переменной больше ничего
...
Рейтинг: 0 / 0
Почему не работает
    #38564884
FatherSql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelouchFatherSql,

1) события
2) передать делегат, получающий значение _stop
3) сделать как то так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
public class StopSource
{
      public bool Stop {get; set;}
}

public class Form1 
{
    StopSource source = new StopSource();

    button1_click()
    {
         source.Stop = false; //нинужно по большому счету
         f = new Form2(source);
         f.Show();

    }

    button2_click()
    {
        source.Stop = true;
    }
}

public class Form2
{
     StopSource _source;

     Form2(StopSource source)
     {
          _source = source;
     }
     
     timer1_Tick()
     {
            if (_source.Stop)
                Close();
     }


} 


ну это и есть код моего класса
...
Рейтинг: 0 / 0
Почему не работает
    #38564888
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FatherSql,

нипанятна. это код, который является исправлением к вашему. Код, написанный вами же в первом сообщении не тождественен этому варианту. Если у вас уже есть такое решение, то не понятен смысл топика.
...
Рейтинг: 0 / 0
Почему не работает
    #38564892
FatherSql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelouchFatherSql,

нипанятна. это код, который является исправлением к вашему. Код, написанный вами же в первом сообщении не тождественен этому варианту. Если у вас уже есть такое решение, то не понятен смысл топика.

авторА вот если свой класс сделать с полем типа бул и передавать без всяких ref то работает

а смысл в том почему через object не работает если это такой же класс как в вашем случае StopSource
...
Рейтинг: 0 / 0
Почему не работает
    #38564895
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FatherSql
а смысл в том почему через object не работает если это такой же класс как в вашем случае StopSource

В том, что bool - тоже object, только не ссылочный
...
Рейтинг: 0 / 0
Почему не работает
    #38564902
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FatherSql,

Смысл в том что при

Код: c#
1.
2.
3.
4.
public Form(ref object stop)
{
    _stop = stop;
}



в _stop попадает не ссыка на поле Form1._stop а значение этого поля.
при Form1._stop = /* да что угодно, не проканает даже со ссылочным типом */ меняется значение поля _stop (не важно ссылочное оно или не ссылочное). при этом, поле Form2._stop по-прежнему сохраняет старое значение _stop (не важно ссылка это или что то еще)
...
Рейтинг: 0 / 0
Почему не работает
    #38564903
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallaris,

читайте про упаковку/распаковку....
...
Рейтинг: 0 / 0
Почему не работает
    #38564948
FatherSql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelouchFatherSql,

Смысл в том что при

Код: c#
1.
2.
3.
4.
public Form(ref object stop)
{
    _stop = stop;
}



в _stop попадает не ссыка на поле Form1._stop а значение этого поля.
при Form1._stop = /* да что угодно, не проканает даже со ссылочным типом */ меняется значение поля _stop (не важно ссылочное оно или не ссылочное). при этом, поле Form2._stop по-прежнему сохраняет старое значение _stop (не важно ссылка это или что то еще)
ну ок, а почему с классом ссылка попадает а не значение
...
Рейтинг: 0 / 0
Почему не работает
    #38564954
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FatherSql,

если вы про мой пример, то там все точно также, попадает, значение поля Form1._source (= ссылке на экземпляр класса). Работает это потому, что метод button2() не изменяет значение поля _source, а меняет значение свойства в экзепляре, на который оно ссылается. Поэтому получается, что поля _source в Form1 и Form2 ссылаются на один экземпляр.
...
Рейтинг: 0 / 0
Почему не работает
    #38565010
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
public class Form1 
{

    bool form2Stop=false;

    button1_click()
    {
         f = new Form2();
         f.FormClosing = (s,e)=>e.Cancel = !form2Stop;
         f.Show();

    }

    button2_click()
    {
        form2Stop=true;
    }
}

public class Form2
{
     timer1_Tick()
     {
           Close();
     }


} 
...
Рейтинг: 0 / 0
Почему не работает
    #38565018
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pation,

да, согласен, хороший вариант)
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Почему не работает
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]