My.Settings.Save()似乎没有保存我的表单的位置

时间:2016-01-19 01:42:23

标签: vb.net save

我正在尝试保存表单的位置,以便当用户返回时,其位置将位于同一位置。

然而,无论如何,我的设置似乎没有保存,我不知道为什么。我在设置设置后立即使用My.Settings.Save()方法,然后关闭表单,重新打开它,看到它出现在与我选择的位置不同的位置。

我尝试首先保存设置:

Private Sub MenuForm_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
    My.Settings.MenuPosition = Me.Location
    My.Settings.Save()
End Sub

因为那不起作用我尝试了这个:

 Private Sub MenuForm_LocationChanged(sender As Object, e As EventArgs) Handles MyBase.LocationChanged
    My.Settings.MenuPosition = Me.Location
    My.Settings.Save()
End Sub

我尝试使用相同的代码在不同的事件中再次设置它,但结果相同。

以下是我加载表单的代码:

Private Sub Menu_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Me.Location = New Point(My.Settings.MenuPosition)
    Me.BackColor = My.Settings.MenuColor
    Me.Label1.ForeColor = My.Settings.MenuTextColor
    If My.Settings.FirstOpen = True Then
        MessageBox.Show("Hello! Please drag your menu into its desired position.", "WikiFinder")
        My.Settings.FirstOpen = False
        'Remember to set to false when done...
    ElseIf My.Settings.MusicMenu = True Then
        MusicMenu.Show()
    End If
End Sub

另外,要确认设置没有保存,请原谅我这是不好的调试方法,我出现了一个消息框,显示保存时的设置,另一个是我加载设置时。两者都有不同的文本。

另外我应该补充一下,我的所有设置范围都设置为User

有人可以解释这里发生了什么,以及如何解决它?

1 个答案:

答案 0 :(得分:1)

如果问题仍然存在,那么这是一种解决方法。我不确定你是否有这种可能性。

一种解决方案是将值写入文件中,然后在重新启动程序时读取该文件。以下是如何做到这一点:

For Each p As String In PortNames
    Dim tsmi As ToolStripMenuItem = New ToolStripMenuItem()
    tsmi.Name = p
    p.Insert(3, "&") 'This appears to do nothing
    tsmi.Text = p
    tsmi.CheckOnClick = True
    tsmi.Checked = False
    AddHandler tsmi.Click, AddressOf Me.PortSelectionTooStripMenuItem_Click
    CommunicationsToolStripMenuItem.DropDownItems.Add(tsmi)
Next

所以,在你的情况下,你可以这样做:

void write_SPI1() {
  int i;
  SPI_I2S_ITConfig(SPI1,SPI_I2S_IT_RXNE,ENABLE);
  for (i=0;i<SPI_TX_MAX; i++) {
    while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE)!=SET)
      ;
    SPI_I2S_SendData(SPI1,spiTxBuff[i]);
  }
}

这将在指定文件中写入窗口的位置,由My.Computer.FileSystem.WriteAllText(Path, Text, Append [as Boolean]) 分隔。现在你必须在程序启动时读取这个文件:

Private Sub SaveLocation() Handles Me.LocationChanged
    My.Computer.FileSystem.WriteAllText(Path, Me.Location.X & ";" & Me.Location.Y, False)
End Sub

现在,让我解释一下。 ;读取指定文件中的所有文本。在我们的例子中,设置文件。因此,我们将文件中的文本存储在名为Dim LastX As Integer Dim LastY As Integer Private Startup() Handles Me.Load Try Dim Data As String = My.Computer.FileSystem.ReadAllText(Path) 'Read Data from File LastX = Data.Split(";")(0) 'Set LastX Variable by splitting the Data-String LastY = Data.Split(";")(1) 'Set LastY Variable by splitting the Data-String Me.Location = New Point(LastX, LastY) 'Set the location of the window Catch NoAccess As UnauthorizedAccessException 'Executed when the user has no access to the Settings File Catch Ex As Exception 'First Open Procedure End Try End Sub 的变量中。现在,因为我们用My.Computer.FileSystem.ReadAllText()分隔坐标,我们可以按值读取文件值。 Data实际上返回一个字符串数组,例如: 我们的字符串是;。如果我们使用.Split(),我们的字符串会在每10;20;30处被拆分。因此,我们得到一个包含以下值的数组:.Split(";")。现在我们可以通过指定要读取的索引来读取不同的值。在我们的示例字符串中,值0将为10,值1将为20,值2将为30.

我希望我没有让你感到困惑,这是我在StackOverflow上的第一个答案。

快乐编码,米卡