Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 12.06.2012, 21:15   #1
tat-besidovska
Пользователь
 
Регистрация: 17.01.2008
Сообщений: 29
По умолчанию подписаться на событие в главной форме

Добрый вечер! Подскажите, пожалуйста, создаю UserControl, подгружаю его на главную форму. Как узнать UserControl, что на главной нажали на кнопку? Спасибо
tat-besidovska вне форума Ответить с цитированием
Старый 12.06.2012, 21:41   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,120
По умолчанию

tat-besidovska

Как узнать UserControl, что на главной нажали на кнопку?

Код:
void OnLoad()
{
    this.button1.OnClick += (s, e) => { this.userControl1.НажалиКнопкуНасяльника(); }
}
Rififi вне форума Ответить с цитированием
Старый 12.06.2012, 22:14   #3
tat-besidovska
Пользователь
 
Регистрация: 17.01.2008
Сообщений: 29
По умолчанию

Подписалась на событие по Вашем примеру, теперь вопрос в том, как отключить обработчик, т.к при повторном нажатии на кнопку( а нажатие на кнопку у меня - это сохранение данных в базе с UserControl) сохранениеотрабатывается дважды, видимо из-за того. что обработчик не отключен
tat-besidovska вне форума Ответить с цитированием
Старый 12.06.2012, 22:26   #4
tat-besidovska
Пользователь
 
Регистрация: 17.01.2008
Сообщений: 29
По умолчанию

Хочу рассказать как было у меня реализовано, более подробно, и при этой реализации периодически идет дублирование:

На одной машине требуется запускать несколько копий программы(юзеры подключаются к машине удаленно и запускают программу). Так вот,когда работает несколько копий, при обработке, например, события создания новой записи в базе, сохранение отрабатывается с дубликатом, т.е вместо одной записи создается две, а то и три.

На главной форме вызываю UserControl нажатием на кнопку:

Код:
private void barButtonItem36_ItemClick(object sender, ItemClickEventArgs e)
        {
               ucNewApp _ucnew = new ucNewApp(this);

                xtraTabPage7.Controls.Add(_ucnew);
                 .....
        }
При этом в главной форме делаю:
Код:
public partial class frmMain : RibbonForm
    {
        public event EventHandler<EventArgs> theEvent;
       ........
А в UserControl:
Код:
public partial class ucNewApp : UserControl
    {
        
        private frmMain _mainForm;
Код:
public ucNewApp(frmMain main)
        {
            InitializeComponent();
           
            _mainForm = main;
            _mainForm.theEvent += new EventHandler<EventArgs>(OnTheEvent);
Ну и конечно в UserControl реализую обработку:

Код:
private void OnTheEvent(object sender, EventArgs e)
{
       //реализуем обработку
}
Затем, по нажатию на главной форме на кнопку "Сохранить" делаю:

Код:
if (theEvent != null)
                theEvent(this, EventArgs.Empty);
Ну и после на главной форме удаляю контрол:

Код:
xtraTabPage7.Controls.Clear();
После в событии контрола ParentChanged

Код:
if (Parent == null)
            {
                //_mainForm.theEvent -= new EventHandler<EventArgs>(OnTheEvent);
               
            }
tat-besidovska вне форума Ответить с цитированием
Старый 13.06.2012, 00:48   #5
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

А обязательно отписыватся?
Можно добавить флаг, по которому ориентироватся о состоянии процесса.
Lime вне форума Ответить с цитированием
Старый 13.06.2012, 07:59   #6
tat-besidovska
Пользователь
 
Регистрация: 17.01.2008
Сообщений: 29
По умолчанию

а что, это поможет?
tat-besidovska вне форума Ответить с цитированием
Старый 13.06.2012, 10:42   #7
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

Цитата:
Сообщение от tat-besidovska Посмотреть сообщение
а что, это поможет?
несовсем понятно что вам нужно, но предлагаю такую схему:


Код:
bool flag = false;

mainbutton_click(...)
{
if (!flag)
  {
    flag = true;
    //выполнение операции ("сохранение данных в базе")
    flag = false;
  }
  else
  {
    //бездействие либо оповещение пользователя о выполняющейся перации
  }
}
Lime вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подписаться на событие другого приложения Tolias C# (си шарп) 6 07.03.2012 16:59
Подписаться на событие загруженной Assembly Ustim C# (си шарп) 3 15.06.2011 00:51
Отображение на главной форме Gamst Общие вопросы Delphi 3 26.05.2010 00:34
Отображение на главной форме Gamst Помощь студентам 1 26.05.2010 00:28
Подписаться на событие другого класса boris-blade Общие вопросы .NET 1 06.04.2010 21:53


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Здесь нужно купить рекламу за 7 тыс руб в месяц! )
пишите сюда - alarforum@yandex.ru
ИКС 840