2016-08-16 46 views
1

一员,你看之前,这里有几页我已经看过张贴了这个问题之前:Visual Basic中:“<name>”不是“<classname>”

'Button_Click' : is not a member of 'ButtonTest::MainPage'。这个问题关于C++,据我所知,并没有用。根据唯一的答案,您需要“在MainPage.xaml.h文件中将MainPage :: Button_Click的原型定义为该类的成员。”

visual basic error BC30456 'Form1' is not a member of 'WindowsApplication1'。这个问题也会遇到同样的错误,但是它是由其他原因造成的。在OP回答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目前正在做节目,我想作一个小窗口弹出,如果用户将导致错误。

我有一个名为popup.xaml的WPF窗口,我有一个名为'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(); 
    } 
} 

点击'ok'按钮后,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中使用此代码创建类的实例。VB:

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'

我该如何解决这个问题?我的主页上实际上有几个按钮,可以完美的使用visual basic!这个按钮由于某种原因没有。有什么不同,我需要做,因为它是在一个单独的窗口作为弹出窗口的一部分?

更新

我有另一个今天环顾四周,我发现'{name}' is not a member of '{classname}'在MSDN这给下面的两个解决方案:

1:检查成员的名称,以确保其准确。

2:使用该类的实际成员。

我的按钮名为okButton,方法是okButton_Click()。该错误在popup.g.i.vb文件中突出显示,表示Me.okButton_Click不是我的popup类的成员。我没有看到上述任何一个修正如何适用,因为我am使用了正确的名称并且成员确实存在

+0

如果您呼叫使用的ShowDialog弹出,那么应该没有需要处理OK按钮的点击,只是使它的默认按钮。或者,您仍然可以在wpf中使用MessageBox.show。 –

+0

我在C#代码中使用showDialog()但不在我的VB代码中 –

+0

是否有任何理由不能在VB代码中使用ShowDialog或MessageBox。 –

回答

1

您的构造函数定义不正确 - 构造函数总是在VB.NET中命名为New - 您需要从构造函数中调用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,后面的代码没有PartialInherits Window部件,所以那些可能并不需要,但可能不会伤害任何东西。

显示窗口也应该像C#版本:

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

'errorMessage.Text没有被声明'除此之外,构造函数按预期工作,并且InitializeComponent()现在被正确声明了。我认为构造函数就像在C#中一样,它们共享类的名字..... –

+0

我试图构建,现在它说initializeComponent()没有声明再次,原来的问题'okButton_Click()不是弹出窗口的成员'仍然显示 –

+0

我刚刚删除了window.xaml,因为我们没有使用它,这也给我构建错误Oo –