Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Расшарить ивент между формами. / 25 сообщений из 25, страница 1 из 1
22.05.2014, 09:30
    #38648388
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расшарить ивент между формами.
Я хочу чтоб при нажатии на кнопку или другой ивент, не важно на одной форме другие формы тоже видели этот ивент.
Подскажите как это сделать.
...
Рейтинг: 0 / 0
22.05.2014, 10:23
    #38648470
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расшарить ивент между формами.
jenya7 тоже видели этот ивент.
Извините за занудство, но надо понимать, что вам надо чтобы не "видели" а чтобы "ловили"?
...
Рейтинг: 0 / 0
22.05.2014, 10:25
    #38648478
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расшарить ивент между формами.
D129jenya7 тоже видели этот ивент.
Извините за занудство, но надо понимать, что вам надо чтобы не "видели" а чтобы "ловили"?

а еще точнее подписаться на ивент :))
...
Рейтинг: 0 / 0
22.05.2014, 10:35
    #38648502
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расшарить ивент между формами.
jenya7а еще точнее подписаться на ивент :))
ну так подписывайтесь, контролы public сделайте чтоб их за пределами формы видно было
...
Рейтинг: 0 / 0
22.05.2014, 10:59
    #38648560
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расшарить ивент между формами.
я сделал так
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
//add a delegate
public delegate void ItemClickedHandler(object sender, ItemClickedEventArgs e);
// add an event of the delegate type
public event ItemClickedHandler ItemClicked;

// не знаю, зачем весь этот геморрой - можно данные передавать в статическом объекте  ну да ладно
public class ItemClickedEventArgs : System.EventArgs
       {
           // add local member variables to hold object
           private Test test;
           // class constructor
           public ItemClickedEventArgs(Test _test)
           {
               this.test = _test;
           }
           // Properties - Viewable by each listener
           public Test TestInstance
           {
               get { return test; }
           }
       }



а вот тут я получаю эксепшен, ругается что ItemClicked – null.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
private void listViewSteps_Click(object sender, EventArgs e)
{
    if (listViewSteps.SelectedItems.Count > 1)
        return;
    Test selected_test = (listViewSteps.SelectedItems[0].Tag as Test);
    if (selected_test == null)
        return;
    SetTabControl(tabControlSettings, selected_test); 
    listViewSteps.LabelEdit = true;
    
    // instance the event args and pass a value
    ItemClickedEventArgs args = new ItemClickedEventArgs(selected_test);
    // raise the event with the updated arguments
    ItemClicked(this, args);
    this.Dispose();
}


как мне инициализировать ItemClicked?
...
Рейтинг: 0 / 0
22.05.2014, 11:02
    #38648564
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расшарить ивент между формами.
jenya7
Код: c#
1.
 this.Dispose();


зачем это?
...
Рейтинг: 0 / 0
22.05.2014, 11:04
    #38648571
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расшарить ивент между формами.
Изопропилjenya7
Код: c#
1.
 this.Dispose();


зачем это?

я сам задавался этим вопросом :)
...
Рейтинг: 0 / 0
22.05.2014, 11:19
    #38648601
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расшарить ивент между формами.
jenya7я сам задавался этим вопросом :)
а зачем пишешь?
...
Рейтинг: 0 / 0
22.05.2014, 11:27
    #38648620
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расшарить ивент между формами.
Изопропилjenya7я сам задавался этим вопросом :)
а зачем пишешь?
уже затер. а как инициализировать ItemClicked?
...
Рейтинг: 0 / 0
22.05.2014, 11:42
    #38648646
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расшарить ивент между формами.
jenya7уже затер. а как инициализировать ItemClicked?
перед возбуждением события нужно проверить есть ли у мего подписчики(просто на не null проверить)
...
Рейтинг: 0 / 0
22.05.2014, 11:43
    #38648648
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расшарить ивент между формами.
сделал так
Код: c#
1.
2.
ItemClicked +=new ItemClickedHandler(ItemClicked);
ItemClicked(this, args);


ругается Delegate to an instance method cannot have null 'this'.
...
Рейтинг: 0 / 0
22.05.2014, 11:46
    #38648657
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расшарить ивент между формами.
Изопропилjenya7уже затер. а как инициализировать ItemClicked?
перед возбуждением события нужно проверить есть ли у мего подписчики(просто на не null проверить)
я не зню как это проверить.
а что если нет подписчиков я не могу запустить ивент?
...
Рейтинг: 0 / 0
22.05.2014, 11:46
    #38648658
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расшарить ивент между формами.
jenya7,
можно ничего не шарить, а воспользоваться передатчиком EventHandler
код главной формы ( две кнопки)
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            EventHandler handler = null;
            new Form2(ref handler).Show(); 
            if(handler!=null)
            button2.Click += handler;
        }

        private void button2_Click(object sender, EventArgs e)
        {

        }


код починенной
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
  public Form2(ref EventHandler exHandler)
        {
            exHandler += (sender, args) =>
                         {
                             MessageBox.Show("dsfsdfsd");
                         };
            InitializeComponent();
        }


это можно рассмотреть как зарядку для ума, а вот применение на практике сомневаюсь
если не вычистить обработчик, подчиненная форма так и будет таскаться в куче, а обработчик стоять в цепи как вкопанный..
...
Рейтинг: 0 / 0
22.05.2014, 11:47
    #38648659
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расшарить ивент между формами.
jenya7сделал так
Код: c#
1.
2.
ItemClicked +=new ItemClickedHandler(ItemClicked);
ItemClicked(this, args);



ругается Delegate to an instance method cannot have null 'this'.

написана какаяе-то хрень

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
//класический райз эвента
protected void OnItemClicked(ItemClickedEventArgs e)
{
  var h = ItemClicked;
  if(h!=null)
  {
      h(this,e);
  }
}
...
Рейтинг: 0 / 0
22.05.2014, 12:03
    #38648699
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расшарить ивент между формами.
Где-то в степи,
у вас это дело в конструкторе формы, а у меня подчиненная форма все время открыта.

pation,
сейчас проверю :)
...
Рейтинг: 0 / 0
22.05.2014, 12:06
    #38648709
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расшарить ивент между формами.
jenya7а что если нет подписчиков я не могу запустить ивент?
логично.
...
Рейтинг: 0 / 0
22.05.2014, 12:11
    #38648728
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расшарить ивент между формами.
переделал
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 protected void OnItemClicked(ItemClickedEventArgs e)
 {
       var h = ItemClicked;
       if (h != null)
       {
           h(this, e);
       }
}

private void listViewSteps_Click(object sender, EventArgs e)
{
        // instance the event args and pass it each value
        ItemClickedEventArgs args = new ItemClickedEventArgs(selected_test);
        
       OnItemClicked(args);
} 



во второй форме добавил
Код: c#
1.
2.
3.
4.
 private void MainForm_OnItemClicked(object sender, MainForm.ItemClickedEventArgs e)
 {
        textBoxTestName.Text = "Event Raised!!!";
}


но ничего не происходит
...
Рейтинг: 0 / 0
22.05.2014, 12:21
    #38648763
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расшарить ивент между формами.
jenya7но ничего не происходит
во второй форме подписаться на событие нужно
...
Рейтинг: 0 / 0
22.05.2014, 12:23
    #38648771
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расшарить ивент между формами.
jenya7,

Евент - это коллекция делегатов.
Делегаты - это "указатели" на функции, которые будут вызваны, при "подьеме" эвента.

Если коллекция пуста - то ничего и не будет вызываться.

Вам надо "напихать" в коллекцию все обработчики, которые вы желаете вызывать.

Я понял сейчас, почему вы сначала написали "видеть". Вы думали, что если как-то именами связать, то оно само как-нибудь вызовется.
:-)
...
Рейтинг: 0 / 0
22.05.2014, 12:25
    #38648778
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расшарить ивент между формами.
а как подписаться на событие во второй форме?
...
Рейтинг: 0 / 0
22.05.2014, 12:30
    #38648791
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расшарить ивент между формами.
jenya7а как подписаться на событие во второй форме?
Я не буду отвечать. Вопрос ко мне должен был бы звучать так "а как напихать обработчиков?"
:-/
...
Рейтинг: 0 / 0
22.05.2014, 12:41
    #38648822
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расшарить ивент между формами.
jenya7,
автору вас это дело в конструкторе формы, а у меня подчиненная форма все время открыта.
у вас клиника?

Код: 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.
  public interface IHandler
    {
        void AddHandler(EventHandler handler);
        void RemoveHandler(EventHandler handler);
    }
           
    public partial class Form1 : Form,IHandler
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
           
            new Form2(this).Show(); 
        }

        private void button2_Click(object sender, EventArgs e)
        {

        }

        public void AddHandler(EventHandler action)
        {
            button2.Click += action;
        }


        public void RemoveHandler(EventHandler handler)
        {
            button2.Click -= handler;
        }
    }


Код: 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.
 public partial class Form2 : Form
    {
        private readonly IHandler _exHandler;

        public Form2(IHandler exHandler)
        {
            _exHandler = exHandler;

            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            _exHandler.AddHandler((o, args) =>
                                              {
                                                  MessageBox.Show("sasfafaf");
                                              });
        }
    }


...
Рейтинг: 0 / 0
22.05.2014, 14:02
    #38649025
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расшарить ивент между формами.
и все таки как подписаться на событие во второй форме?
...
Рейтинг: 0 / 0
23.05.2014, 12:32
    #38650092
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расшарить ивент между формами.
jenya7и все таки как подписаться на событие во второй форме?
Код: c#
1.
MainForm.ItemClicked += MainForm_OnItemClicked;
...
Рейтинг: 0 / 0
25.05.2014, 09:20
    #38651250
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Расшарить ивент между формами.
pationjenya7и все таки как подписаться на событие во второй форме?
Код: c#
1.
MainForm.ItemClicked += MainForm_OnItemClicked;



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


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