2016-08-16 1 views
1

Перед тем, как читать, вот пару страниц я рассматривающие до публикации этого вопроса:Visual Basic: «<name>» не является членом «» <classname>

'Button_Click' : is not a member of 'ButtonTest::MainPage'. Этот вопрос касается C++ и, насколько мне известно, не полезен. Согласно единственному ответу, вам нужно «определить прототип MainPage :: Button_Click в файле MainPage.xaml.h как член класса».

visual basic error BC30456 'Form1' is not a member of 'WindowsApplication1'. Этот вопрос также испытывает ту же ошибку, однако это вызвано чем-то другим. О.П. ответил this answer, говоря, что он исправил проблему:

Если вы переименовали Form1 запуска он, скорее всего, вы должны изменить настройки формы запуска. Вы можете найти этот параметр, чтобы открыть «Мой проект» в «Обозревателе решений». Выберите раздел «Приложение», при необходимости измените «форму запуска».

В моем случае, я не переименовывается ничего так делает проект, а код которого ошибка указывает на это строка, которая добавляет обработчик в «popup.givb»

Я также смотрел на MSDN: Creating Event Handlers for WPF Controls. Страница использует следующий синтаксис для реагирования на кнопку быть нажата:

<Button Click="Button2_Click" /> 

и

Sub Button2_Click(ByVal Sender As Object, ByVal e As RoutedEventArgs) 
    'Code here 
End Sub 

Это точно такой же синтаксис, как я использовал.

Мой код

Я в настоящее время делает программу с использованием WPF и Visual Basic, и я хотел бы сделать небольшое всплывающее окно, если пользователь вызывает ошибку.

У меня есть окно WPF с именем popup.xaml, и у меня есть класс под названием «popup», который наследуется от «окна». Я хочу создать окно, а затем закрыть его, когда пользователь нажмет кнопку «ОК». Эквивалент этого в C# будет следующим:

popup errorWindow = new popup("Error message here"); 
errorWindow.ShowDialog(); 

Когда этот метод вызывается, переопределение из всплывающего окна() вызывается, который инициализирует, а также принимает сообщение об ошибке в качестве параметра.

public partial class popup : Window 
{ 
    public popup() 
    { 
     InitializeComponent(); 
    } 

    public popup(string errorMessage) 
    { 
     InitializeComponent(); 
     this.errorMessage.Text = errorMessage; 
    } 

    private void okButton_Click(object sender, RoutedEventArgs e) 
    { 
     this.Close(); 
    } 
} 

При нажатии кнопки «ОК» нажата, метод okButton_Click() вызывается, и окно закрывается.

В моем Visual Basic приложения, у меня есть один и тот же код WPF для окна ошибки:

<Window x:Class="FacialRecognitionVB.popup" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:FacialRecognitionVB" 
    mc:Ignorable="d" 
    Title="Error." MinHeight="150" MaxHeight="150" Height="150" MinWidth="300" MaxWidth="300" Width="300" > 
<Grid> 
    <Border VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Background="Gray" /> 
    <StackPanel Orientation="Vertical" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="5,5,5,5" > 
     <TextBlock x:Name="errorMessage" FontSize="18" FontWeight="Medium" Text="An error has occured." TextWrapping="Wrap" /> 
    </StackPanel> 
    <Button x:Name="okButton" Template="{StaticResource ButtonTemplate}" Content="OK" Width="40" VerticalAlignment="Bottom" HorizontalAlignment="Right" Margin="5,5,5,5" Click="okButton_Click" /> 
</Grid> 

Несмотря на это, обработчик события для нажатия на кнопку воспроизведения вверх. Код VB для моего всплывающего класса почти точно так же:

Partial Public Class popup 

    Inherits Window 

    Public Sub Popup() 
    End Sub 

    Public Sub Popup(ByVal message As String) 

     Dim errorMessage As TextBlock 
     errorMessage.Text = message 

    End Sub 

    Private Sub okButton_Click(sender As Object, e As RoutedEventArgs) 

     Me.Close() 

    End Sub 

End Class 

создать экземпляр класса с помощью этого кода в MainWindow.В.Б:

Dim errorWindow As New popup() 
    errorWindow.Popup("An error has occured.") 

Когда я пытаюсь построить это, я получаю ошибку «okButton_Click» не является членом «всплывающих окон». Двойным щелчком на ошибку в списке ошибок он принимает меня popup.givb и подчеркивает следующее:

#ExternalSource ("..\..\popup.xaml", 14) 
AddHandler okButton.Click, New RoutedEventHandler(AddressOf Me.okButton_Click) 

#End ExternalSource 

Он не даст мне никакой дополнительной информации, кроме «okButton_Click» не является членом " popup '

Как это исправить? У меня на самом деле есть несколько кнопок на моей главной странице, которые отлично работают с использованием визуального базового! Эта одна кнопка, по какой-то причине, этого не делает. Есть ли что-то другое, что мне нужно сделать, потому что оно находится в отдельном окне как часть всплывающего окна?

Update

я был еще один осмотреться сегодня, и я нашел '{name}' is not a member of '{classname}' на MSDN, которая дает следующие два решения:

1: Проверьте имя элемента, чтобы обеспечить ее точность.

2: Используйте действительный член класса.

Моя кнопка называется okButton и метод okButton_Click(). Ошибка подсвечивается в файле popup.g.i.vb, говоря, что Me.okButton_Click не является членом моего popup-класса. Я не вижу, как применяется одно из исправлений выше, так как I am с использованием правильного имени и члена делает.

+0

Если вы вызываете всплывающее окно с помощью ShowDialog, то не должно быть никакой необходимости обрабатывать OK нажатие кнопки, просто сделать кнопку по умолчанию. Кроме того, вы можете использовать MessageBox.show в wpf. –

+0

Я использую showDialog() в коде C#, но не в коде VB –

+0

Есть ли причина, по которой вы не могли использовать ShowDialog или messageBox в коде VB. –

ответ

1

Ваши конструкторы не определены правильно - конструкторы всегда называются New в VB.NET - и вам нужно позвонить InitializeComponent из вашего конструктора. Вы также делаете Dim errorMessage As TextBlock, что не требуется, так как оно определено в XAML.

Похоже, что-то нарушил связь между XAML и кодом за файл, и это, вероятно, проще удалить все файлы, относящиеся к окну и начать с нуля, но ваш код позади должен выглядеть примерно так:

Partial Public Class popup 
    Inherits Window 

    Public Sub New() 
     ' This call is required by the designer. 
     InitializeComponent() 
    End Sub 

    Public Sub New(ByVal message As String) 
     ' This call is required by the designer. 
     InitializeComponent() 
     errorMessage.Text = message 
    End Sub 

    Private Sub okButton_Click(sender As Object, e As RoutedEventArgs) 
     Me.Close() 
    End Sub 

End Class 

В VS2015, код позади не имеет Partial или Inherits Window части, так что те могут не потребоваться, но, вероятно, ничего не болит.

Отображение окна также должно выглядеть C# версии:

Dim errorWindow As New popup("An error has occured.") 
errorWindow.ShowDialog() 
+0

'errorMessage.Text не объявлен'. Кроме этого, оба конструкторы работают так, как ожидалось, и InitializeComponent() теперь объявлен правильно. Я думал, что конструкторы были похожи на C#, где они разделяют имя класса ..... –

+0

Я попытался построить, и теперь он говорит, что initializeComponent() не объявлен снова, также оригинальная проблема 'okButton_Click() не является членом popup' по-прежнему показывает –

+0

Я просто удалил window.xaml, так как мы его не используем, и это тоже приводит к ошибкам сборки Oo –

Смежные вопросы