Vb.net 如何刷新从txt文件读取的组合框列表

Vb.net 如何刷新从txt文件读取的组合框列表,vb.net,Vb.net,如何从链接到我的组合框的.txt文件中获取最新信息?我有一个表单可以写入.txt文件,还有另一个表单(组合框)可以读取.txt文件。但是读取的表单不会获得.txt文件的最新输入,除非我关闭表单并重新打开它。如何让组合框刷新.txt文件? 我敢说你的生活会轻松得多,因为你使用了一个数据集和一堆数据表,并将所有这些组合绑定到它们: 我会做以下的事情。我在这里描述的步骤大约需要5分钟才能完成,再加上几分钟来复制不同的代码位: 在解决方案资源管理器中右键单击项目 选择添加新 选择“数据集”(在“数据

如何从链接到我的组合框的.txt文件中获取最新信息?我有一个表单可以写入.txt文件,还有另一个表单(组合框)可以读取.txt文件。但是读取的表单不会获得.txt文件的最新输入,除非我关闭表单并重新打开它。如何让组合框刷新.txt文件?


我敢说你的生活会轻松得多,因为你使用了一个数据集和一堆数据表,并将所有这些组合绑定到它们:

我会做以下的事情。我在这里描述的步骤大约需要5分钟才能完成,再加上几分钟来复制不同的代码位:

  • 在解决方案资源管理器中右键单击项目
  • 选择添加新
  • 选择“数据集”(在“数据”下)选择一个名称
  • 如果它没有自动打开,请双击它。您会看到一个空的设计图面
  • 在曲面上单击鼠标右键,然后添加新。。数据表
  • 称之为光纤
  • 右键单击它,添加。。列,称之为FiberThickness,使用属性网格为其提供合适的数据类型(double?)
  • 为纤维重量添加一列
  • 为Veil添加另一个datatable和列(您可以看到它开始看起来像一个迷你数据库)
  • 继续添加datatable,然后添加所有相关属性的列。我想最后你会有7个数据表,除了最后一个数据表外,所有数据表都会有2列
  • 保存数据集设计

  • 打开DB表单的设计器(不带红色和蓝色按钮)

  • 在其他窗口内的“视图”菜单上打开“数据源”窗口
  • 在DataSources窗口中展开dataset的节点,并将其中一个表拖到表单上-将创建一个grdiview,以及一个dataset(位于托盘底部)、bindingsource和一个BindingNavigator。删除导航器,只留下网格、数据集和bindingsource
  • 重命名底部托盘中的数据集;单击它并更改属性网格中的名称,使其具有前导下划线。这很有帮助,因为在VB中,当变量与对象类型具有相同的名称时,事情会变得混乱,在本例中,表单设计器将a
    Dim thermoLamDataSet作为新的thermoLamDataSet
    ——这两个名称仅大小写不同,VB不区分大小写,因此添加一个前导下划线有助于将事情分开,并知道我们谈论的是变量还是类型
  • 重复添加,然后删除的过程。最后,托盘中应该有一个数据集和7个bindingsources,表单上应该有7个网格。很好地排列网格,因为它们将取代您的文本框(您的“数据库”)将知道多种纤维/面纱等;使用文本框显示它们并不理想,因为它一次只能显示一件事-网格更适合于此,因为用户可以上下滚动条目并编辑、删除和添加更多内容)
  • 如果您完全坚持保留文本框的想法,请遵循以下流程:
    • 在“数据源”窗口中展开光纤节点,查看列现在是如何列出的?将每列拖到窗体上。同样,您在任务栏中会看到一个数据集、bindingnav和bindingsource,但这次您会看到文本框
    • 您刚才删除的这些文本框已经连接(绑定)到数据集的表列。删除旧文本框,并将新文本框整齐排列。将bindingnavigator适当地放在面板中的文本框附近。它将用于更改文本框显示的内容,以便用户可以滚动浏览光纤表中的记录,编辑现有记录、删除记录、添加新记录等
  • 现在我们有了一个表单,它能够编辑数据集数据库中的每一行。添加一个保存按钮(可能还有一个SaveAs..和一个Load按钮),或者在表单关闭时放入一些代码来保存数据集:
这一行代码将整个数据集和每个表的内容保存到与exe名称相同但具有xml扩展名的路径。如果需要,可以提供不同的逻辑。与其他表单的通信并不重要,只是我想你不希望你的用户每次打开应用程序时都必须输入所有这些数据


我们需要做的下一件事是创建它,以便此表单可以在创建数据集时将其作为参数。这样,主窗体就可以负责创建数据集,但它会将其数据集传递给此窗体进行编辑。这是两个表单共享相同数据的方式,对该表单所做的编辑将反映在主表单上

放置一个构造函数:

Public Sub New(ds as ThermoLamDataSet) 'whatever you called your dataset,

    _thermoLamDataSet = ds 'remember I said to change the name of the dataset in the tray at the bottom of the form - here _thermoLamDataSet is whateve the dataset in the tray is called

End Sub
在主窗体中,当用户单击(编辑数据库?)按钮时,我们将在编辑时将主窗体数据集的实例传递到此窗体:

Public Sub EditDatabaseButton_Click(...) Handles EditDbButton.Click

  Call New EditorForm(Me._tlDS).Show() 'I'm going to rename the dataset on this form to _tlDS below

End Sub
我决定调用主窗体
\u tlDS
上的数据集,以强调它与编辑器窗体上的数据集不同。但它是同一类型的数据集,因此可以将主窗体中的数据集传递到编辑器窗体,并使用该数据集进行通信;两种形式在内存中使用相同的对象,只是名称不同而已。他们可以有相同的名字,我只是不想让你认为他们必须有相同的名字

让我们设置主窗体:

  • 打开主窗体设计器
  • 打开“数据源”窗口
  • 展开数据集节点名称和光纤节点。使用FiberHickness列旁边的下拉列表将文本框更改为组合框
  • 将FiberHickness组合拖到表单上,托盘中再次出现一堆东西。如果出现导航器,请删除它-我们不需要它。将组合的dropdownstyle更改为DropDownList
  • 重命名表单设计器底部托盘中的数据集,将其名称更改为
    \u tlDS
    或类似名称(我之所以选择此名称是因为我假设
    Public Sub New(ds as ThermoLamDataSet) 'whatever you called your dataset,
    
        _thermoLamDataSet = ds 'remember I said to change the name of the dataset in the tray at the bottom of the form - here _thermoLamDataSet is whateve the dataset in the tray is called
    
    End Sub
    
    Public Sub EditDatabaseButton_Click(...) Handles EditDbButton.Click
    
      Call New EditorForm(Me._tlDS).Show() 'I'm going to rename the dataset on this form to _tlDS below
    
    End Sub
    
    Public Sub MainFormLoad(...) Handles MainForm.Load
    
    
      Dim path = Path.ChangeExtension(Application.ExecutablePath, "xml")
      If File.Exists(path) Then _myDataSet.ReadXml()
    
    End Sub
    
    ReadOnly Property CurrentFiberRow() As ThermoLamDataSet.FiberRow
        Get
          'do'nt forget, I rename my BindingSources from the default fiberBindingSource to _fiberBindingSource
          If _fiberBindingSource.Current Is Nothing Then Return Nothing
          Return DirectCast(DirectCast(_fiberBindingSource.Current, DataRowView).Row, ThermoLamDataSet.FiberRow)
        End Get
    
    If CurrentFiberRow Is Nothing Then
      MessageBox.Show("Choose a fiber thickness first!")
      Return
    End If
    
    Dim result = CurrentFiberRow.Thickness * CurrentFiberRow.Weight * Convert.ToDouble(fiberAreaTextBox.Text)
    
    ...
    
    Private Sub RadioButton1_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton1.CheckedChanged
        If RadioButton1.Checked = True Then
            FillCombo()
        End If
    End Sub
    Friend Sub FillCombo()
        Dim FILE_NAME As String = "C:\Users\ladam\Desktop\Fiber Type.txt"
        ComboBox1.Items.Clear()
        If File.Exists(FILE_NAME) Then
            Dim lines = File.ReadAllLines(FILE_NAME)
            ComboBox1.Items.AddRange(lines)
        Else
            MsgBox("Oooops, File not found !!!")
        End If
    End Sub
    
    Private Sub WriteToFile()
        'Code that writes to text file
        Form1.FillCombo()
    End Sub
    
    Private Sub OpenForm2()
        Dim frm As New Form2
        frm.Show()
        frm.frm1 = Me
    End Sub
    
    Friend frm1 As Form1
    
    Private Sub WriteToFile()
        'Code that writes to text file
        frm1.FillCombo()
    End Sub