1

我想知道你是否可以帮助我?我的问题是,如果您在文本框中输入数字/小数并单击一个按钮,然后在设置中更新以在另一个链接中进行更改,是否有办法在表单中更改 my.Settings 中的值到变量中的 my.Settings ?!

表格一:

公共类 frmConverter

Dim input As String
Dim result As Decimal

Dim EUR_Rate As Decimal = My.Settings.EUR_Rates
Dim USD_Rate As Decimal = 1.6
Dim JYP_Rate As Decimal = 179.65

Private Sub btnCalc_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalc.Click

    input = txtInput.Text

    Try

        If ComboBox1.Text = "£" Then
            Pounds()

        ElseIf ComboBox1.Text = "€" Then
            Euros()

        ElseIf ComboBox1.Text = "$" Then
            Dollars()

        ElseIf ComboBox1.Text = "¥" Then
            Yen()

        End If

    Catch es As Exception
        MsgBox("Error!")
    End Try

End Sub

Private Sub btnSettings_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSettings.Click

    Me.Hide()
    frmExchange.Show()

End Sub

Private Sub btnReset_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReset.Click

    txtInput.Text = ""
    lblResult.Text = ""

End Sub

Function Pounds()

    If ComboBox1.Text = "£" And ComboBox2.Text = "€" Then
        result = (input * EUR_Rate)
        lblResult.Text = FormatNumber(result, 2) & " " & ComboBox2.Text

    ElseIf ComboBox1.Text = "£" And ComboBox2.Text = "$" Then
        result = (input * USD_Rate)
        lblResult.Text = FormatNumber(result, 2) & " " & ComboBox2.Text

    ElseIf ComboBox1.Text = "£" And ComboBox2.Text = "¥" Then
        result = (input * JYP_Rate)
        lblResult.Text = FormatNumber(result, 2) & " " & ComboBox2.Text

    End If

    Return 0
End Function

形式二:公共类 frmExchange

Private Sub frmExchange_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    My.Settings.EUR_Rates = (txtinput.Text)

    My.Settings.Save()
    My.Settings.Reload()

End Sub

Public Sub SetNewRate(ByVal rate As Decimal)

    txtinput.Text = rate.ToString

End Sub

Private Sub btnchange_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnchange.Click

    If ComboBox1.Text = "€" Then

        My.Settings.USD_Rates = (txtinput.Text)
        frmConverter.SetNewRate(txtinput.Text)

    End If

End Sub

结束课

4

1 回答 1

0

听起来您正试图将其My.Settings用作某种全局参考变量集。那不是它们的用途,不是它们的工作方式,也不是它们的用途。

首先,打开 Option Strict,因为它看起来可能已关闭。这会将文本框的十进制值存储到定义为十进制的设置变量中:

My.Settings.USD_Rates = CDec(SomeTextBox.Text)

这就是它会做的一切。它不会保存该值,也不会传递它或与其他表单和变量共享它。

My.Settings.Save            'saves current settings to disk for next time
My.Settings.Reload          'Load settings from last time

这在MSDN上都有介绍。任何地方都没有联系。如果您有其他形式的代码,如下所示:

txtRate.Text = My.Settings.USD_Rates.ToString

txtRate将新值发布到设置时不会自动更新。只有值而不是对象(请参阅值类型和引用类型)。要将新值传递给另一种形式:

' in other form:
Public Sub SetNewRate(rate As Decimal)
    ' use the new value:
    soemTextBox.Text = rate.ToString
End Sub 

以得到改变的形式:

Private Sub btnchangeRate(....
    ' save to settings which has nothing to do with passing the data  
    My.Settings.USD_Rates = CDec(RateTextBox.Text)
    otherForm.SetNewRate(CDec(RateTextBox.Text))
End Sub

如果您使用默认表单实例,您可能会遇到问题,但这是一个不同的问题。


你搞砸了指示。这 2 个过程应该以 2 种不同的形式进行 - 一种用于发送新值,一种用于接收新值。随着编辑和更完整的图片,有一个更简单的方法。

Private Sub btnSettings_Click(...) Handles btnSettings.Click
    ' rather than EMULATE a dialog, lets DO a dialog:
    'Me.Hide()
    'frmExchange.Show()

    Using frm As New frmExchange         ' the proper way to use a form
        frm.ShowDialog

        ' Im guessing 'result' is the xchg rate var
        result = CDec(frm.txtInput.Text)
    End Using          ' dispose of form, release resources

End Sub

另一种形式

Private Sub btnchange_Click(....)
    ' do the normal stuff with Settings, if needed then:
    Me.Hide
End Sub
于 2014-11-02T16:41:12.327 回答