我有一个父窗体和一个子窗体(都是Windows窗体)。在父表单上,我有一个$.get('https://{api_path}.php',function(data, textStatus, jqXHR){
console.log(jqXHR.responseText);
return data;
});
,带有2个标签,每个标签都需要添加一个子表单。
在一个子窗体上,我有一个TabControl
,其某些值作为初始值。我想要的是,当我更改子窗体之一的实例上的TextBox值时,它也需要更新其他实例。
我设法在表单上添加了两个实例,
TextBox
但是在一个实例上更改时不知道如何在其他实例上更改值。
答案 0 :(得分:2)
您可以使用数据绑定到应用程序设置,也可以将数据绑定到任何其他支持双向数据绑定的类的单个实例:
打开 Settings.settings 文件。
如果您选择显示解决方案资源管理器工具栏中的所有文件,则它位于解决方案资源管理器中的“我的项目”节点下。您还可以通过右键单击项目节点,选择“属性”并选择“设置”选项卡来打开它。
添加一个新的设置属性并对其进行命名,例如 Setting1 ,然后将其设置为字符串并根据需要分配默认值。
TextBox
。Text
属性,并作为值,选择在步骤2中创建的设置属性。运行应用程序时,键入绑定到设置值的任何TextBox
控件时,所有绑定的文本框将立即更新。
答案 1 :(得分:1)
类似于Reza Aghaei described,是手动应用的。
过程说明:
List(Of Form)
的ChildForms
。 DataSource
,这里是一个DataTable
(命名为 BindingDataTable
),用于为两种不同子窗体中的文本框提供默认值< / li>
TextBoxBindings
),它将为控件提供绑定逻辑/支持。DataSource
中的BindingSource
设置为数据表以连接数据。List(Of Form)
从TabControl中删除子窗体。Private ChildForms As List(Of Form)
Private TextBoxBindings As BindingSource
Private BindingDataTable As DataTable
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
BindingDataTable = New DataTable("TextSource")
BindingDataTable.Columns.Add(New DataColumn("TextValue", GetType(String)))
Dim row As DataRow = BindingDataTable.NewRow()
row.ItemArray = New String() {"Default text"}
BindingDataTable.Rows.Add(row)
TextBoxBindings = New BindingSource()
TextBoxBindings.DataSource = BindingDataTable
ChildForms = New List(Of Form)
Dim ch1, ch2 As New ChildForm With {
.FormBorderStyle = FormBorderStyle.None,
.Location = Point.Empty,
.Size = TabPage1.Size,
.TopLevel = False
}
ChildForms.AddRange({ch1, ch2})
For Each frm As Form In ChildForms
Dim txt As TextBox = DirectCast(frm.Controls.Find("TextBox1", False)(0), TextBox)
Dim txtBind = New Binding("Text", TextBoxBindings, "TextValue", True, DataSourceUpdateMode.OnPropertyChanged)
AddHandler txtBind.Parse, AddressOf Me.OnBindingParse
txt.DataBindings.Add(txtBind)
Next
TabPage1.Controls.Add(ChildForms(0))
TabPage2.Controls.Add(ChildForms(1))
ChildForms.ForEach(Sub(f) f.Show())
End Sub
Friend Sub OnBindingParse(sender As Object, e As ConvertEventArgs)
If e.DesiredType Is GetType(String) Then
TextBoxBindings.CurrencyManager.Refresh()
End If
End Sub
Private Sub btnClearChilds_Click(sender As Object, e As EventArgs) Handles btnClearChilds.Click
For i As Integer = 0 To ChildForms.Count - 1
Dim txt As TextBox = DirectCast(ChildForms(i).Controls.Find("TextBox1", False)(0), TextBox)
RemoveHandler txt.DataBindings.Item("Text").Parse, AddressOf Me.OnBindingParse
ChildForms(i).Dispose()
Next
TextBoxBindings.Dispose()
BindingDataTable.Dispose()
End Sub
抽样结果: