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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как из одной формы вызвать событие другой? 
V
    Опции темы
neprofi
Дата 18.5.2008, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



хелп! Мне необходимо при нажатии кнопки на форме Form3 вызвать событие  сохранитьToolStripMenuItem_Click , которое прописано для пункта меню  Form1

Код

namespace ZZZ
{
    public partial class Form1 : Form
    {
        
        public Form1()
        {
            InitializeComponent();          
                                  
        }

       private void сохранитьToolStripMenuItem_Click(object sender, EventArgs e)
        {....}
    }
}



форма 3
Код

namespace ZZZ
{
    public partial class Form3 : Form
    {  
        public Form3()
        {
            InitializeComponent();
        }


        private void button1_Click(object sender, EventArgs e)
        {
        // я не знаю как это здесь вызвать?
        }
    }
}


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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 3
Всего: 56



Ты наступил на классические ламерские грабли... 
Запомни: никогда не помещай бизнес-логику в обработчиках событий, вместо этого вызывай из них методы классов, не связанных с формами...
P.S. Почитай статью про антипаттерны, тебе будет полезно...


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
neprofi
  Дата 21.5.2008, 06:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Хорошо, так нельзя. А что же мне делать? Прописать все для "сохранить" в "батон1". Это ведь столько лишней писанины! Неужели в C# нет ничего подобного ссылкам на функцию? 
PM MAIL   Вверх
WarHog
Дата 21.5.2008, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 20.10.2007
Где: Воронеж

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



Так можно, но так не делается. Если не хочешь последовать совету source777, то можешь сделать так
Код


private void button1_Click(object sender, EventArgs e)
        {
        сохранитьToolStripMenuItem_Click(this, new EventArgs());
        }

Только в "private void сохранитьToolStripMenuItem_Click(object sender, EventArgs e)" измени private на public.
Только я бы так не делал  smile 

Цитата

Неужели в C# нет ничего подобного ссылкам на функцию?

Есть делегаты - безопасные объекты-обертки.
--------------------
PM MAIL   Вверх
Moid
Дата 21.5.2008, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

Так можно, но так не делается.

а делается так:

Код

public void SaveInfo()
{
     //функционал
}


затем по нажатию кнопки пишешь так:
Код

private void buttonSave_Click(object sender, EventArgs e)
{
     SaveInfo();
}


И во всех остальных случаях где нужно вызвать сохранение, вызываешь не buttonSave_Click, а SaveInfo()



--------------------
"Всё должно быть сделано настолько простым, насколько это возможно, но не проще" (с) А.Эйнштейн
PM MAIL   Вверх
WarHog
Дата 21.5.2008, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 20.10.2007
Где: Воронеж

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



Moid, это почти то же, что советовал source777, а ведь автору топика это не подходит smile
--------------------
PM MAIL   Вверх
Moid
Дата 21.5.2008, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(WarHog @ 21.5.2008,  12:25)
Moid, это почти то же, что советовал source777, а ведь автору топика это не подходит smile

Цитата

А что же мне делать? Прописать все для "сохранить" в "батон1". Это ведь столько лишней писанины ...


Автор видимо еще не понял, что на самом деле так будет удобнее.
Лучше сейчас написать несколько дополнительных строк, чем потом копаться во всей этой каше.

Ну, а если всетаки хочется сэкономить на коде, то вот так можно сделать не написав ни одной строчки кода:

В окне "Properties" кнопки выбираем событие "Click". Нажимаем на появившийся треугольничек и выбираем событие меню "saveToolStripMenuItem_Click".


--------------------
"Всё должно быть сделано настолько простым, насколько это возможно, но не проще" (с) А.Эйнштейн
PM MAIL   Вверх
source777
Дата 21.5.2008, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 3
Всего: 56



Цитата(Moid @  21.5.2008,  13:39 Найти цитируемый пост)
Ну, а если всетаки хочется сэкономить на коде, то вот так можно сделать не написав ни одной строчки кода:

В окне "Properties" кнопки выбираем событие "Click". Нажимаем на появившийся треугольничек и выбираем событие меню "saveToolStripMenuItem_Click". 
Это всё конечно хорошо, но не помешало бы дать обработчику события более внятное имя, типа SaveCommandHandler, а из этого обработчика уже вызвать метод state.SaveInfo(), выполняющий сохранение, таким образом мы получим двойной выигрыш:
1) операция сохранения не будет иметь жёсткой привязки к форме
2) исключим дублирование кода в обработчиках событий, которые имеют одинаковый смысл, но относятся к разным контролам.

Добавлено через 1 минуту и 47 секунд
Цитата(WarHog @  21.5.2008,  12:25 Найти цитируемый пост)
Moid, это почти то же, что советовал source777, а ведь автору топика это не подходит smile 
Да, именно это я и советовал, однако я бы предпочёл вынести метод SaveInfo() за пределы класса формы... 



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Moid
Дата 21.5.2008, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(source777 @ 21.5.2008,  14:24)
Да, именно это я и советовал, однако я бы предпочёл вынести метод SaveInfo() за пределы класса формы...

Если автору жалко расходовать 2-3 строчки на создание метода, 
то о вынисения метода в отдельный класс я не осмелиться предложить  smile 


--------------------
"Всё должно быть сделано настолько простым, насколько это возможно, но не проще" (с) А.Эйнштейн
PM MAIL   Вверх
QryStaL
Дата 21.5.2008, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


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

Репутация: 10
Всего: 32



source777 говорит о разделении слоев абстракции - Business layer и Presentation layer. В эту сторону автору и следует копать...


--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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