Обновить измененное значение элемента управления TextBox одного экземпляра формы на все экземпляры

Это называется деструктурированием . Вы можете найти наибольшую информацию в MDN: Назначение деструктурирования .


Обсуждение стандартов ECMAScript можно найти на в их wiki-странице , также интересно это сообщение в блоге в dailyjs.

2
задан Reza Aghaei 17 January 2019 в 23:49
поделиться

2 ответа

Подобно тому, что Реза Агаэй описал , применил вручную .

Описание процедуры:

  • Создать контейнер для дочерних форм, который будет использоваться для базового управления (добавление / удаление и удаление дочерних форм). Здесь List(Of Form) с именем ChildForms .
  • Создайте DataSource, здесь DataTable (названный BindingDataTable ), используемый для предоставления значения по умолчанию для текстовых полей в 2 различных дочерних формах
  • [1120 ] Создайте BindingSource (с именем TextBoxBindings ), который обеспечит логику привязки / поддержку элементов управления.
  • Установите DataSource из BindingSource в DataTable для соединения данных.
  • Добавьте привязок к элементам управления TextBox дочерних форм, чтобы подключить их свойство Text к общему источнику данных.
  • Добавьте обработчик событий к событию Binding.Parse , которое будет использоваться для анализа / проверки значения свойства Text в TextBoxes при его изменении.
  • Добавить дочерние формы без полей к TabPages TabControl.
  • Используйте 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

Пример результата:

BindingSource to WinForms Controls

0
ответ дан Jimi 17 January 2019 в 23:49
поделиться

Вы можете использовать привязку данных к настройкам приложения или привязку данных к одному экземпляру любого другого класса, который поддерживает двустороннюю привязку данных:

  1. Открыть Настройки. файл настроек .
    Он находится в узле «Мой проект» в обозревателе решений, если вы решите показать все файлы из панели инструментов обозревателя решений. Вы также можете открыть его, щелкнув правой кнопкой мыши на узле проекта, выбрав «Свойства» и выбрав вкладку «Настройки».

  2. Добавьте новое свойство настройки и назовите его как-нибудь, например Setting1 , и пусть тип будет строковым и при желании назначьте значение по умолчанию.

  3. Откройте форму (ы) в дизайнере.
  4. Выберите TextBox, в котором вы хотите показать значение.
  5. В Окне свойств разверните (Настройки приложения) и нажмите ... перед (PropertyBinding) .
  6. В окне Настройки приложения выберите свойство Text и в качестве значения выберите свойство настройки, которое вы создали на шаге 2.
  7. Если у вас есть несколько форм, в которых вы хотите отобразить значение, повторите шаги с 3 по 6 для каждой формы.

Когда вы запускаете приложение, когда вы вводите любой из элементов управления TextBox, которые привязаны к значению настройки, все связанные текстовые поля будут обновлены немедленно.

0
ответ дан Reza Aghaei 17 January 2019 в 23:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: