Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
399 / 318 / 53
Регистрация: 14.08.2014
Сообщений: 1,010

Перевод кода C# -> VB.NET (подписка на событие)

17.10.2017, 18:35. Показов 1578. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Мужики, может кто-то понятным языком объяснить, как это работает?
И как это можно переписать на VB.NET?

C#
1
2
3
4
5
6
7
        private void Form1_Load(object sender, EventArgs e)
        {
            this.FormClosing += delegate 
            {
                // тут какой-то код
            };
        }
Как я понял, то это всё происходит грубо говоря при запуске программы.
Тогда что такое это? this.FormClosing
Это же событие уже происходит перед закрытием формы(если судить по бейсику). Что оно тогда делает при запуске формы?

И что такое это?! delegate
Думал переменная, но её объявления в коде я не нашел.

Пробовал скромить код конверторам, но они выдают не рабочий код.

Буду благодарен за пояснения.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.10.2017, 18:35
Ответы с готовыми решениями:

Перевод кода из C# в vb.net
блин ребят я тут помучался вроде какбы типо пытался перевести в vb.net но всегда все равно оставаались синтаксические ошибки помогите плиз...

Перевод кода C# -> VB.NET
Всем привет! Ребят, есть метод: private int Index(TabPage page) { for(int i = 0; i < TabPages.Count; i++) { ...

Перевод кода из VB.Net в C#
Есть код на VB.Net позволяющий проводить шифрование и дешифровку файла. Помогите пожалуйста адаптировать его к C#. Моих познаний не...

7
Эксперт .NET
 Аватар для Rius
13110 / 7670 / 1674
Регистрация: 25.05.2015
Сообщений: 23,382
Записей в блоге: 14
17.10.2017, 18:47
Лучший ответ Сообщение было отмечено Дядя Корней как решение

Решение

Дядя Корней,
Цитата Сообщение от Дядя Корней Посмотреть сообщение
Тогда что такое это? this.FormClosing
Это же событие уже происходит перед закрытием формы(если судить по бейсику).
Да.
Цитата Сообщение от Дядя Корней Посмотреть сообщение
Что оно тогда делает при запуске формы?
К нему добавляется обработчик событий, делегат.

Цитата Сообщение от Дядя Корней Посмотреть сообщение
И что такое это?! delegate
Думал переменная, но её объявления в коде я не нашел.
Типа указатель на функцию, в C#. В отличие от C++, здесь по-людски сделано.
delegate (Справочник по C#).
Цитата Сообщение от Дядя Корней Посмотреть сообщение
но её объявления в коде я не нашел
Она объявляется прямо здесь, внутри функции.

Понятнее вам будет так:
C#
1
2
3
4
5
6
7
8
private void Form1_Load(object sender, EventArgs e)
{
  this.FormClosing += this.On_FormClosing;
}
private void On_FormClosing(object sender, FormClosingEventArgs e)
{
  // тут какой-то код
}
1
399 / 318 / 53
Регистрация: 14.08.2014
Сообщений: 1,010
17.10.2017, 18:51  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Понятнее вам будет так:
Да, так сразу стало понятно.
Благодарю
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
18.10.2017, 03:47
Вот так это будет в бесике:

VB.NET
1
2
3
Private Sub Form1_Load(object sender, EventArgs e)
    Me.FormClosing += AddressOf(On_FormClosing)
End Sub
А ещё в бесике есть возможность объявлять обработчик события декларативно через операторы Handles и WithEvents.
В C# такой возможности нет, там приходится выкручиваться подпиской на события через делегаты.

VB.NET
1
2
3
4
5
Private WithEvents Form1 As Form
 
Private Sub On_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) Handles Form1.FormClosing
    ' Декларативное объявление обработчика события
End Sub
1
Модератор
Эксперт .NET
 Аватар для Yury Komar
4357 / 3427 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
18.10.2017, 04:37
а кае же AddHandler и RemoveHandler или это другое?

Добавлено через 3 минуты
или в C# вот так:

C#
1
2
3
4
5
6
7
8
9
10
    public MyClass()
    {
        InitializeComponent();
        textBox1.LostFocus += new EventHandler(testBox1_LostFocus);
    }
 
    void testBox1_LostFocus(object sender, EventArgs e)
    {
        // do stuff
    }
1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18279 / 14202 / 5368
Регистрация: 17.03.2014
Сообщений: 28,883
Записей в блоге: 1
18.10.2017, 14:53
Лучший ответ Сообщение было отмечено Yury Komar как решение

Решение

Дядя Корней, с помощью delegate объявляется анонимная функция которая добавляется в список подписчиков события FormClosing. Точным аналогом в VB.NET будет следующий код:
VB.NET
1
2
3
4
5
Private Sub Form1_Load(sender As Object, e As EventArgs)
    AddHandler Me.FormClosing, Function ()
            ' Тут какой-то код
        End Function
End Sub
Цитата Сообщение от Замабувараев Посмотреть сообщение
Вот так это будет в бесике:
Не совсем. Вместо += для подписки на событие используется ключевое слово AddHandler.
3
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
19.10.2017, 01:47
Да. У меня там выше неправильно.
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,150
Записей в блоге: 43
19.10.2017, 10:38
Дядя Корней, в основном тут уже ответили, но немного дополню. Основная статья документации по данному вопросу находится здесь Анонимные методы (Руководство по программированию в C#) | Microsoft Docs.
В двух словах:
Анонимные методы в C# появились во второй версии языка и на тот момент они были единственным способом создания экземпляра делегата "на лету". Здесь надо сказать, что на тот момент в бейсике не было их эквивалента. Подобное стало возможно делать и в бейсике только в версии языка 2008-го года, когда в обоих языках появились лямбда-выражения. Код, приведенный OwenGlendower, хоть и является наиболее близким аналогом первоначального кода на шарпе (если не обращать внимания на неверную сигнатуру, разумеется), тем не менее он скорее эквивалентен такому коду
C#
1
2
3
4
5
6
7
        private void Form1_Load(object sender, EventArgs e)
        {
            this.FormClosing += () => 
            {
                // тут какой-то код
            };
        }
А вот точного эквивалента кода из топикстарта в бейсике до сих пор не существует.
И насчет сигнатуры: более точный код с лямбда-выражениями будет выглядеть так
VB.NET
1
2
3
4
5
Private Sub Form1_Load(sender As Object, e As EventArgs)
    AddHandler Me.FormClosing, Sub (sdr As Object, ea As FormClosingEventArgs)
            ' Тут какой-то код
        End Sub
End Sub
4
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.10.2017, 10:38
Помогаю со студенческими работами здесь

Перевод кода из VB.NET
Нашел программу и конвентор перевел код и вот как было <DllImport("Kernel32.dll")> Private Shared Function GetCurrentProcess() As...

Перевод кода с JavaScript на VB .NET
Привет всем! Подскажите, пожалуйста, существует ли какой-то автоматический переводчик кода с Java-скрипт на VB .NET или на C# .NET ?...

Перевод кода с Pascal на VB .NET
Здравствуйте! Есть код на паскале: k=0 For i := length(s)To 1 k = k + 1 For i := length(s) To 1...

Подписка На Событие
Здравствуйте. Может кто сталкивался с таким вопросом: документ стоит на поддержке, а мне нужно сделать ему еще одну форму списка и через...

Подписка на событие
Дорогие форумчане, крик души! Помогите пожалуйста новичку с созданием подписки! Ситуация такова: есть регистр сведений...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru