Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка событий динамически созданного элемента, Обработка событий 
V
    Опции темы
camtasia
  Дата 25.5.2010, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте!!!
Динамически создаю вкладку tabControl, на неё помещаю динамически созданный компонент webBrowser: 
Код

 int i_key;
 i_key = time(NULL);
 String^ S = i_key.ToString();
 S = S->Substring(5);
 TabPage^ i_tabPage;
 i_tabPage = gcnew TabPage;
 i_tabPage->Name = "tabPage" + S;
 i_tabPage->Text = "tabPage" + S;
 tabControl1->TabPages->Add(i_tabPage);
 WebBrowser^ i_webBrowser;
 i_webBrowser = gcnew WebBrowser;
 i_webBrowser->Name = "webBrowser" + S;
 i_tabPage->Controls->Add(i_webBrowser);
 i_webBrowser->Dock = DockStyle::Fill;
 i_webBrowser->Navigate("www.yandex.ru");

как мне создать обработчик событие для компонента webBrowser (допустим DocumentCompleted)?

я так понимаю нужно написать функция, что-то на подобии этого
Код

 void f_DocCompletedWB(System::Object^  sender);
{
        // код обработчика
}


но что в реализации писать не пойму  smile , как обратиться к компоненту?

при работе с webbrowser созданным в конструкторе использую следующий код: 
Код

private: System::Void webBrowser1_DocumentCompleted(System::Object^  sender, System::Windows::Forms::WebBrowserDocumentCompletedEventArgs^  e) 
 {
     this->Text = webBrowser1->DocumentTitle + " - Браузер";
     toolStripTextBox1->Text = webBrowser1->Url->ToString();
     tabPage2->Text = webBrowser1->DocumentTitle;
     String^ SF = "http://" + webBrowser1->Url->Host->ToString() + "/favicon.ico";
     IntPtr SF1 = Marshal::StringToHGlobalAnsi(SF);
     LPCSTR SourceFile = (LPCSTR)SF1.ToPointer();
     LPCSTR DestFile = "c:\\favicon.ico";
     URLDownloadToFileA(NULL, SourceFile, DestFile, 0, NULL);
     imageList2->Images->Clear();
     imageList2->Images->Add(Image::FromFile("c:\\favicon.ico"));
     tabPage2->ImageIndex = 0;
 {

Пожалуйста помогите перенести этот код в обработчик динамически созданного элемента. Буду очень благодарен.
PM MAIL   Вверх
xvr
Дата 25.5.2010, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(camtasia @  25.5.2010,  10:27 Найти цитируемый пост)
как обратиться к компоненту
Параметр sender это и есть твой компонент. Либо явно сохранять указатель на созданный компонент где то в классе.


PM MAIL   Вверх
camtasia
Дата 25.5.2010, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Реализацию я кое-как написал
Код

void f_DocCompletedWB(System::Object^  sender)
{
    this->Text = ((WebBrowser^)sender)->DocumentTitle + " - Браузер";
    toolStripTextBox1->Text = ((WebBrowser^)sender)->Url->ToString();
    tabPage2->Text = ((WebBrowser^)sender)->DocumentTitle;
    String^ SF = "http://" + ((WebBrowser^)sender)->Url->Host->ToString() + "/favicon.ico";
    IntPtr SF1 = Marshal::StringToHGlobalAnsi(SF);
    LPCSTR SourceFile = (LPCSTR)SF1.ToPointer();
    LPCSTR DestFile = "c:\\favicon.ico";
    URLDownloadToFileA(NULL, SourceFile, DestFile, 0, NULL);
    imageList2->Images->Clear();
    imageList2->Images->Add(Image::FromFile("c:\\favicon.ico"));

    tabPage2->ImageIndex = 0;
}

но как теперь мне прикрутить его к компоненту?
Код

 WebBrowser^ i_webBrowser;
 i_webBrowser = gcnew WebBrowser;
 i_webBrowser->Name = "webBrowser" + S;
 i_tabPage->Controls->Add(i_webBrowser);
 i_webBrowser->Dock = DockStyle::Fill;
 i_webBrowser->Navigate("www.yandex.ru");
 i_webBrowser->DocumentCompleted = f_DocCompletedWB(?????); // что здесь то писать не пойму

PM MAIL   Вверх
xvr
Дата 25.5.2010, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(camtasia @  25.5.2010,  17:07 Найти цитируемый пост)

но как теперь мне прикрутить его к компоненту?
Ну как то так
Код

     i_webBrowser->DocumentCompleted += gcnew System::EventHandler(this, &Form1::f_DocCompletedWB);


PM MAIL   Вверх
camtasia
Дата 25.5.2010, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Выскакивает ошибка 
Код

error C3352: void Браузер::Form1::f_DocCompletedWB(System::Object ^): указанная функция не соответствует типу делегата 
"void (System::Object ^,System::EventArgs ^)"

Что делать?

Это сообщение отредактировал(а) camtasia - 25.5.2010, 17:33
PM MAIL   Вверх
camtasia
Дата 25.5.2010, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Все работает!!!!  smile Спасибо большое!
только пришлось немного изменить:
Код

i_webBrowser->DocumentCompleted += gcnew System::Windows::Forms::WebBrowserDocumentCompletedEventHandler(this, &Form1::f_DocCompletedWB);

и так:
Код

void f_DocCompletedWB(System::Object^  sender, System::Windows::Forms::WebBrowserDocumentCompletedEventArgs^  e)


еще один вопрос (немного не в тему):
я хочу поместить все функции в отдельный файл FuncBrowser.cpp, добавляю его в проект, вставляю в него обработчики, создаю и добавляю в проект файл FuncBrowser.h, добавляю в него 
Код

void f_DocCompletedWB(System::Object^  sender, System::Windows::Forms::WebBrowserDocumentCompletedEventArgs^  e);

в файле Form1.h пишу
Код

#include "FuncBrowser.h"


но высыпает целая куча ошибок, что я делаю не привильно?
PM MAIL   Вверх
xvr
Дата 25.5.2010, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(camtasia @  25.5.2010,  18:57 Найти цитируемый пост)
но высыпает целая куча ошибок, что я делаю не привильно? 
Без кода сказать трудно. Скорее всего неправильно объявили метод в классе


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


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

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