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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вызов события из произвольного участка кода в WPF 
V
    Опции темы
CasperSC
Дата 24.7.2010, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Здравствуйте. Возникла ещё одна проблема при переносе приложения на WPF. Если в WinForms можно сделать так:

Код

        //жмём по кнопке "Выбрать музыку"
        private void btnSelectMusicFile_Click(object sender, EventArgs e)
        {
            ..........
            ..........
        }



Далее в другом участке кода:

Код

                    if (MessageBox.Show("Файл для воспроизведения или не существует или не был выбран. " +
                         "Выбрать файл для воспроизведения?", "Внимание",
                         MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
                    {
                        this.btnSelectMusicFile_Click(this.btnPlayStop, EventArgs.Empty); //запускаем событие "Нажатие на кнопку выбрать песню"
                    }



А вот в WPF пробую почти также сделать, но не в какую не хочет:

Код

                    String msgText = "Файл для воспроизведения или не существует или не был выбран. " +
                         "Выбрать файл для воспроизведения?";
                    MessageBoxButton msgBoxButtons = MessageBoxButton.YesNo;
                    MessageBoxImage msgBoxImage = MessageBoxImage.Question;
                    MessageBoxResult msgBoxResult = MessageBox.Show(msgText, "Внимание", msgBoxButtons, msgBoxImage);
                    switch (msgBoxResult)
                    {
                        case MessageBoxResult.Yes:
                            {
                                //запускаем событие "Нажатие на кнопку выбрать песню"
                                this.btnSelectMusicFile_Click(this.btnPlayStop, RoutedEventArgs.Empty);
                            }
                            break;
                    } 

На этой строке происходит ошибка, не дающая скомпилировать проект:

this.btnSelectMusicFile_Click(this.btnPlayStop, RoutedEventArgs.Empty);

Первая ошибка:

Ошибка 1 Наиболее подходящий перегруженный метод для "MyProgramName.WindowAdd.btnSelectMusicFile_Click(object, System.Windows.RoutedEventArgs)" имеет несколько недопустимых аргументов D:\Программирование\C# - Visual Studio 2010\MyProgramName - WPF\MyProgramName\WindowAdd.xaml.cs 416 33 MyProgramName

Вторая ошибка:

Ошибка 2 Аргумент "2": преобразование типа из "System.EventArgs" в "System.Windows.RoutedEventArgs" невозможно D:\Программирование\C# - Visual Studio 2010\MyProgramName - WPF\MyProgramName \WindowAdd.xaml.cs 416 81 MyProgramName 



Не понимаю, почему не получается, перепробовал множество вариантов методом тыка, ничего не помогло.

Это сообщение отредактировал(а) CasperSC - 24.7.2010, 00:33
PM MAIL   Вверх
KelTron
Дата 24.7.2010, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(CasperSC @  24.7.2010,  00:31 Найти цитируемый пост)
this.btnSelectMusicFile_Click(this.btnPlayStop, EventArgs.Empty); //запускаем событие "Нажатие на кнопку выбрать песню"

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

Перенеси весь этот код в отдельный метод и вызывай откуда хочешь.
Изменяем это
Код

private void btnSelectMusicFile_Click(object sender, EventArgs e)
        {
            // бла
        }
if (MessageBox.Show("Файл для воспроизведения или не существует или не был выбран. " +
                         "Выбрать файл для воспроизведения?", "Внимание",
                         MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
                    {
                        this.btnSelectMusicFile_Click(this.btnPlayStop, EventArgs.Empty);
                    }

На это
Код

private void Bla()
{
    // бла
}
private void btnSelectMusicFile_Click(object sender, EventArgs e)
        {
            Bla();
        }
if (MessageBox.Show("Файл для воспроизведения или не существует или не был выбран. " +
                         "Выбрать файл для воспроизведения?", "Внимание",
                         MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
                    {
                        Bla();
                    }

Если нужно добавь параметры.


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
CasperSC
Дата 24.7.2010, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Ну вообще может и изврат. Я знаю, что можно отдельным методом, я так и сделал, так как ответа на этот вопрос сразу не нашёл. А вообще подсказали уже, что можно так:
Код

this.btnSelectMusicFile_Click(this.btnPlayStop, new RoutedEventArgs());


Если сравнить с кодом в первом посту то отличие становится очевидным.
PM MAIL   Вверх
KelTron
Дата 24.7.2010, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Зачем вообще мудрить с этими параметрами, ты ведь всё равно их не используешь.
Код

this.btnSelectMusicFile_Click(null, null);



--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
Kefir
Дата 3.8.2010, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

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



Если совсем строго по теме:
1. Тип RoutedEventArgs.Empty - EventArgs. То биш типы разные. Уж не знаю зачем так и почему не исправили, но это факт. Поэтому правильно тебе говорят, что тип аргумента неправильный.
2. Для вызова эвентов контрола можно использовать красивую функцию UIElement.RaiseEvent(RoutedEventArgs). Ну тут будет та же проблема, если туда вставить RoutedEventArgs.Empty (см. п.1)
PM MAIL WWW Skype   Вверх
CasperSC
Дата 3.8.2010, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Опс. Я тут не отписался. Сори, просто много где этот вопрос задал. Вообще разобрался. Я не знал, что можно просто указать null. А вообще обычно я указываю кто sender, а уже в обработчике в зависимости от того кто sender делается то-то и не во всех случаях удобно использовать просто отдельный метод. 

Не много не по теме: Кто собрался переписывать приложение с WinForms на WPF в первые в своей жизни, ждите не малых трудностей. (не удержался этого не написать)

Это сообщение отредактировал(а) CasperSC - 3.8.2010, 23:16
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




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


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

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