none
Помогите преобразовать метод на C# в метод на VB.Net

    Вопрос

  • Задача состоит в том чтобы отображать список последних открываемых файлов как на картинке

    нашел код, который реализует то что мне нужно на C#, но мне нужно что бы это работало на VB.Net проблемы в преобразовании возникли с одним методом

            /// <summary>
            /// Update the recent list with the values in the registry.
            /// </summary>
            /// <remarks>
            /// Use after initializing.
            /// </remarks>
            public void UpdateList()
            {
                this.DropDownItems.Clear();
                if (varRegistryKey == null || varRegistryKey.ValueCount == 0)
                {
                    this.Enabled = false;
                }
                else
                {
                    this.Enabled = true;
                    foreach (string name in varRegistryKey.GetValueNames())
                    {
                        string value = (string)varRegistryKey.GetValue(name);
                        ToolStripMenuItem item = new ToolStripMenuItem();
                        item.Name = name;
                        item.Size = new System.Drawing.Size(156, 22);
                        item.Text = value;
                        if (this.ItemClick == null)
                        {
                            item.Enabled = false;
                        }
                        else
                        {
                            item.Click += this.ItemClick;
                        }
                        this.DropDownItems.Add(item);
                    }
                }
            }
    а именно в малой его части, кода которая делает item неактивныем, если для него еще нет обработчика события Click. Помогите пожалуйста преобразовать в VB.Net вот эту часть метода.

    if (this.ItemClick == null)
    {
        item.Enabled = false;
    }
    else
    {
        item.Click += this.ItemClick;
    }

Ответы

  • Вы могли бы задать вопрос по нормальному, указав на конкретную проблемную строку, так чтобы не приходилось определять вашу проблему дедуктивным методом. Когда вы определяете событие в C#, компилятор генерирует поле делегата с именем, совпадающим с именем события. В VB.NET же имя этого поля получается путем добавления "Event" к имени события, поэтому код проверки обработчика события на null будет выглядеть так:

    If Me.ItemClickEvent Is Nothing Then

    • Помечено в качестве ответа SergejS 11 июня 2019 г. 7:39
    11 июня 2019 г. 5:54

Все ответы

  • Здравствуйте,

    Возможно как-то так:

    If Me.ItemClick Is Nothing Then
        item.Enabled = False
    Else
        item.Click += Me.ItemClick
    End If


    Если Вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение" Мнения, высказанные здесь, являются отражение моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    7 июня 2019 г. 10:23
    Модератор
  • Если бы было все так просто, но это не работает! Для понимания ItemClick.

        <Category("Action")>
        <Description("This is the function that is executed when a file name is selected from the list. ((ToolStripDropDownItem)sender).Text can be used to find the value of the one that was clicked.")>
        Public Event ItemClick As EventHandler

    • Изменено SergejS 7 июня 2019 г. 12:27
    7 июня 2019 г. 12:22
  • Читаем тут как добавить/убрать обработчик на VB:

    https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/addhandler-statement


    This posting is provided "AS IS" with no warranties, and confers no rights.

    8 июня 2019 г. 21:43
    Модератор
  • "Профессор" Вы вообще вопрос читали или вы тут только ссылки на документации рассылаете! О том, как добавить обработчик события в VB.Net я и без вашей ссылки знаю! 
    9 июня 2019 г. 11:34
  • if (this.ItemClick == null) // тут проверяется если ещё нет обработчика на событие ItemClick
    {
      item.Enabled = false; // то элемент списка делается неактивным 
    }
    else
    {
      item.Click += this.ItemClick; // если же уже есть обработчик на событие ItemClick элемента Recent, то он же устанавливается и для события Click элемента списка
    }

    9 июня 2019 г. 11:42
  • Вы могли бы задать вопрос по нормальному, указав на конкретную проблемную строку, так чтобы не приходилось определять вашу проблему дедуктивным методом. Когда вы определяете событие в C#, компилятор генерирует поле делегата с именем, совпадающим с именем события. В VB.NET же имя этого поля получается путем добавления "Event" к имени события, поэтому код проверки обработчика события на null будет выглядеть так:

    If Me.ItemClickEvent Is Nothing Then

    • Помечено в качестве ответа SergejS 11 июня 2019 г. 7:39
    11 июня 2019 г. 5:54
  • если Вы умеете читать, то я и указал в каких строках у меня возникла проблема!
    If Me.ItemClick Is Nothing Then
        item.Enabled = False
    Else
        item.Click += Me.ItemClick
    End If
    а именно там, где используется Me.ItemClick, это строки 1 и 4. Спасибо за помощь!
    11 июня 2019 г. 7:39