无法动态添加新按钮

时间:2012-01-11 15:17:23

标签: wpf vb.net visual-studio-2010

我刚开始学习VB和Visual Studio,我遇到了一个问题。我花了大部分时间试图找到答案,我有一种可怕的感觉,这将是一个非常简单的东西,我已经看了。

我正在使用Visual Studio 2010中的WPF,并且在单击按钮时尝试在主窗口上动态创建一个按钮(我知道,我读过的所有内容都告诉我这是非常基本的!)这是一个已编辑的代码片段:

Imports System.Data.OleDb
Imports System.Windows.Forms
Imports Excel = Microsoft.Office.Interop.Excel

Class MainWindow

    Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles edit.Click

    ...

    Dim newButton As New Button
    newButton.Text = "New Button"
    newButton.Top = 200
    newButton.Left = 20
    Me.Controls.Add(newButton)

    ...

    End Sub

在我看来,这看起来非常简单和正确,但我收到了一个错误:

“'Controls'不是'myApp.MainWindow'的成员。”

有没有人遇到过这个或知道问题是什么?如果这确实是一个简单的解决方案,请道歉:)

3 个答案:

答案 0 :(得分:5)

您收到的错误告诉您Controls中不存在MainWindow。基本上,没有可通过事件处理程序访问的属性。如果您正在使用WPF并MainWindow继承Window,则需要在Content属性中设置内容。

解决这个问题的最佳方法是将某种形式的容器控制作为窗口的内容。您可以在XAML或代码中定义它(通过代码,您应该设置Window.Content属性)。然后,您可以向该容器添加更多控件。建议的容器有GridCanvasStackPanel等。

我会建议这样的事情:

<强> XAML

<MainWindow ...>

    <StackPanel x:Name="ControlContainer">
        <Button Content="Click me to create buttons!" Click="CreateButton_Click" />
    </StackPanel>
</MainWindow>

代码背后

Private Sub CreateButton_Click(ByVal sender As Object, ByVal e As EventArgs)

    Dim button As New Button()

    ' Initialize the button
    ' ...

    ' Add the button to the stack panel
    Me.ControlContainer.Children.Add(button)
End Sub

答案 1 :(得分:0)

好的MainWindow不是表单。创建一个新项目并将相同的代码复制到一个可以工作的按钮中。

您必须找出表单控件的问题。

答案 2 :(得分:0)

看起来你正在混合WinForms和WPF编码 - 这是两种不同的技术。

This link可以帮助您在WPF中的运行时添加按钮