【问题标题】:How to access control of another class in mainwindow WPF using vb如何使用vb访问主窗口WPF中另一个类的控制
【发布时间】:2013-06-26 21:36:45
【问题描述】:

我正在尝试使用以下代码从 WPf 中的 MainWindow 调用另一个类中的文本框:

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

 Mainwindowtext2.Text = DirectCast(Application.Current.MainWindow, Window1).text1.Text

 End Sub

当我编译时没有错误,但是在单击按钮后出现此错误

InvalidCastException was unhandled
"Unable to cast object of type 'WpfApplication1.MainWindow' to type 'WpfApplication1.Window1'."

在 MainWindow 中是否有其他方法可以从另一个类中获取控件?

【问题讨论】:

  • WPF 本身就是一个复杂的框架。我建议您在深入了解 .Net 和 OOP 概念之前先熟悉一下。也许尝试一些控制台应用程序,或者搜索关于 OOP 和一般编程的介绍教程。
  • 嗯,错误告诉你你的演员不正确(Application.Current.MainWindow)不是Window1类型。鉴于您向我们展示的内容,很难说出其他更多内容。
  • @KevinDiTraglia
    我正在尝试从 MainWindow 中的另一个类控制文本框。在 Windows 窗体中,它应该看起来像这样
    me.Mainwindowtext2.text = form2.text1.text.

标签: wpf vb.net textbox


【解决方案1】:

答案在您得到的错误代码中:

无法将“WpfApplication1.MainWindow”类型的对象转换为“WpfApplication1.Window1”类型。

您拥有的对象属于“WpfApplication1.MainWindow”类型。这意味着您不能将其转换为“WpfApplication1.Window1”。

由于您的根命名空间是“WpfApplication1”,因此代码应为:

Private Sub Button_Click_1(sender As Object, e As RoutedEventArgs)
    Mainwindowtext2.Text = DirectCast(Application.Current.MainWindow, MainWindow).text1.Text
End Sub

为了理解原因,静态属性Application.Current 持有对类Application 的引用。它是MainWindow 属性的类型为Window。在您的应用程序中,您的主窗口类型为MainWindow,它派生自Window,因此可以从Application.Current.MainWindow 属性返回。这就是为什么您需要将其转换为 MainWindow

编辑

如果您尝试获取与主窗口不同的窗口的实例,您可以使用应用程序的 Windows 属性:

Mainwindowtext2.Text = Application.Current.Windows.OfType(Of Window1)().First().text1.Text

WPF 创建支持字段的方式,只要类在同一个程序集中,这应该可以工作。如果不是,请考虑创建一个只读属性来公开文本,或在 XAML 中设置 FieldModifier property

【讨论】:

  • 但是如果我将它转换到 MainWindow 我无法获得另一个类中的控件。如果我将Window1 更改为MainWindow,我将在主窗口中获得控件。我正在尝试在另一个类中获取文本框。代码错了吗?
  • @ReignKeith 如果您知道该类并拥有它的实例,则向其添加公共属性,以便从文本框中公开您想要的信息。
  • @MarkHall 我试过了,但仍然无法调用文本框。 Public Class Window1 Private Textbox2 As TextBox<br/> Public ReadOnly Property text1() As TextBox<br/> Get<br/> Return Textbox2<br/> End Get<br/> End Property
    Class MainWindow<br/> Private Sub Button_Click(sender As Object, e As RoutedEventArgs)<br/> MainWindowText2.Text = Window1.textbox2.text<br/> End Sub
    出现错误“WpfApplication1.Window1.Textbox2 在此上下文中不可访问,因为它是私有的”
  • @MarkHall 不用担心,希望我们可以帮助他学习这些基本概念!而且,像个白痴一样,我回复了你而不是 OP。
  • 非常感谢,代码运行良好!我还有很多东西要学。再次感谢您的帮助和解释。
【解决方案2】:
Please change your code:

Mainwindowtext2.Text = DirectCast(Application.Current.Window1, Window1).text1.Text

希望这对您有所帮助...

试试这个... 您可以使用以下绑定概念:

在 .CS 文件中:

Private _TextBoxName As String

Public Property TextBoxName() As String
    Get
        Return _TextBoxName
    End Get
    Private Set(ByVal value As String)
        _TextBoxName = value
    End Set
End Property

在 Xaml 中:

< TextBox Text="{Binding TextBoxName}"/>

现在您可以使用 Textbox 的值如下:

Window1textbox.Text = mainwindow.TextBoxName

【讨论】:

  • 试过了,但是有错误信息“'Window1' is not a member of 'System.Windows.Application'”
猜你喜欢
  • 2019-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多