1

あなたが私を助けることができるかどうか疑問に思っていましたか?私の質問は、テキストボックスに数値/小数を入力してボタンをクリックし、設定を更新してから、リンクされている別の設定で変更する場合、フォームの my.Settings の値を変更する方法があるということです変数の my.Settings に?!

フォーム 1:

パブリック クラス

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

フォーム 2: パブリック クラス 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 がオフになっている可能性があるため、オンにします。これは、テキスト ボックスの 10 進数値を、Decimal として定義されている設定変数に格納します。

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 つの異なる形式で行われることになっています。1 つは新しい値を送信するためのもので、もう 1 つは新しい値を受信するためのものです。編集とより完全な画像を使用すると、より簡単な方法があります。

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 に答える