将详细信息从一个 Window 传递到另一个 Window
Passing Details From One Window to Another Window
我有一个 select 的 TextBoxes
离子,当用户希望注意到他们与另一个人有联系时,他们会填写该信息。大多数 TextBoxes
都是通过键入来隐含填写的。但是,对于其中一个,我希望用户能够从单击按钮时出现的 People
列表中 select。
这是我遇到问题的地方。到目前为止,我刚刚制作了一个 DataGrid
出现并处理它的 SelectionChanged
方法来填充 TextBoxes
文本 属性。这工作正常,但是现在当前页面上没有足够的 space 来显示整个 DataGrid
以及他们可以 select 来自的所有人。
我决定在一个单独的、较小的 Window
中显示 People
,当用户单击 Button
时会出现该 Window
。我遇到的问题是,当用户 selects Person
他们希望在新 Window
中标记联系人时,我不知道如何通知原始 [=20] =] 一个 Person
已经 selected,关闭新的较小的 Window
并在原来的 Window
上填写适当的 TextBox
。
根据打开的 Window
上的 selection,在原始 Window
上填写 TextBox
最直观的方法是什么?
我会使用委托,它调用原始 window 的函数并用它解析更改后的变量。所以你知道用户什么时候点击了什么,你可以直接对此做出反应 "event".
Link:
https://msdn.microsoft.com/en-us/library/ms173171.aspx
如果您使用像 Galasoft 的 MVVM Light (http://www.galasoft.ch/) 这样的框架,他们有一个专门用于此目的的消息系统。它允许您 "broadcast" 可以由应用程序的任何其他部分 "received" 发送的消息
这是在考虑使用域、模型、演示文稿(Winforms/WPF 版本的 MVC 格式)来制作您的应用程序时。
您可以将每个表单作为自己的 class,它们是自己的 class。创建每个表单 class,但如果控件是私有的,则向其中添加一些 public 成员。让它们仅具有 "get" 属性,并 return 具有该形式的任何控件或变量的值。您的主窗体将是控制窗体。所有表单都将由主表单处理,因此当您打开它时,它是 class 主表单可以访问的。
现在,如果我记得(最近做了更多的 MVC 而不是任何 Winforms)我相信如果你使用 ShowDialog() 方法它会冻结主线程所以当你关闭主窗体时你可以继续阅读在您打开的 class 表单中有 public 个成员。同步我相信它运行为。如果您只使用 Show() 线程将继续异步进行。使用异步,您可能必须在启动代码中使用主窗体,因此那里总是有一个 window 但订阅窗体的关闭事件并有一个方法可以抓住那些 public 成员.确保在主 class 的根目录实例化额外的形式,这样当调用它的方法存在时它不会超出范围。您甚至可以使调用的方法成为异步调用,并在运行表单上的 Show 方法的命令之前等待。
总结,将每个表单视为自己的 class 但添加 public 成员可以从您想要的控件 and/or 变量中读取值。当 class 通过事件关闭时或当线程从窗体关闭时同步读取该数据。表单关闭不会丢弃对象,只是表单的可视化。
哦,如果您要将信息从主表单传递给正在打开的子表单,请为该表单添加一个构造函数 class,将您的输入作为模型或值来填写适当的显示它之前的变量或表格或创建 public 属性 您可以在显示 class.
之前输入要发送的值
记住,万物皆是class,当你如此看待它、如此对待它时,答案自然会来。 :-)
我应该警告,我是一个长篇大论的解释者。
在工作中将所有这些从记忆中记下来,因此可能存在一些错误。有的话请告诉我。
我认为问题出在访问主 window 的控件上,不是吗?
您可以使用以下结构定义更改用户选择和访问 MainWindow 控件的事件:
((MainWindow)Application.Current.MainWindow).MyTextBox
我有一个 select 的 TextBoxes
离子,当用户希望注意到他们与另一个人有联系时,他们会填写该信息。大多数 TextBoxes
都是通过键入来隐含填写的。但是,对于其中一个,我希望用户能够从单击按钮时出现的 People
列表中 select。
这是我遇到问题的地方。到目前为止,我刚刚制作了一个 DataGrid
出现并处理它的 SelectionChanged
方法来填充 TextBoxes
文本 属性。这工作正常,但是现在当前页面上没有足够的 space 来显示整个 DataGrid
以及他们可以 select 来自的所有人。
我决定在一个单独的、较小的 Window
中显示 People
,当用户单击 Button
时会出现该 Window
。我遇到的问题是,当用户 selects Person
他们希望在新 Window
中标记联系人时,我不知道如何通知原始 [=20] =] 一个 Person
已经 selected,关闭新的较小的 Window
并在原来的 Window
上填写适当的 TextBox
。
根据打开的 Window
上的 selection,在原始 Window
上填写 TextBox
最直观的方法是什么?
我会使用委托,它调用原始 window 的函数并用它解析更改后的变量。所以你知道用户什么时候点击了什么,你可以直接对此做出反应 "event".
Link: https://msdn.microsoft.com/en-us/library/ms173171.aspx
如果您使用像 Galasoft 的 MVVM Light (http://www.galasoft.ch/) 这样的框架,他们有一个专门用于此目的的消息系统。它允许您 "broadcast" 可以由应用程序的任何其他部分 "received" 发送的消息
这是在考虑使用域、模型、演示文稿(Winforms/WPF 版本的 MVC 格式)来制作您的应用程序时。
您可以将每个表单作为自己的 class,它们是自己的 class。创建每个表单 class,但如果控件是私有的,则向其中添加一些 public 成员。让它们仅具有 "get" 属性,并 return 具有该形式的任何控件或变量的值。您的主窗体将是控制窗体。所有表单都将由主表单处理,因此当您打开它时,它是 class 主表单可以访问的。
现在,如果我记得(最近做了更多的 MVC 而不是任何 Winforms)我相信如果你使用 ShowDialog() 方法它会冻结主线程所以当你关闭主窗体时你可以继续阅读在您打开的 class 表单中有 public 个成员。同步我相信它运行为。如果您只使用 Show() 线程将继续异步进行。使用异步,您可能必须在启动代码中使用主窗体,因此那里总是有一个 window 但订阅窗体的关闭事件并有一个方法可以抓住那些 public 成员.确保在主 class 的根目录实例化额外的形式,这样当调用它的方法存在时它不会超出范围。您甚至可以使调用的方法成为异步调用,并在运行表单上的 Show 方法的命令之前等待。
总结,将每个表单视为自己的 class 但添加 public 成员可以从您想要的控件 and/or 变量中读取值。当 class 通过事件关闭时或当线程从窗体关闭时同步读取该数据。表单关闭不会丢弃对象,只是表单的可视化。
哦,如果您要将信息从主表单传递给正在打开的子表单,请为该表单添加一个构造函数 class,将您的输入作为模型或值来填写适当的显示它之前的变量或表格或创建 public 属性 您可以在显示 class.
之前输入要发送的值记住,万物皆是class,当你如此看待它、如此对待它时,答案自然会来。 :-)
我应该警告,我是一个长篇大论的解释者。
在工作中将所有这些从记忆中记下来,因此可能存在一些错误。有的话请告诉我。
我认为问题出在访问主 window 的控件上,不是吗? 您可以使用以下结构定义更改用户选择和访问 MainWindow 控件的事件:
((MainWindow)Application.Current.MainWindow).MyTextBox