vb.net 在这种情况下无法访问,因为它是“私人的”

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/19821897/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-17 15:44:18  来源:igfitidea点击:

not accessible in this context because it is 'Private'

vb.netvariablesprivatepublic

提问by user2962121

I'm writing some code for a calculator and I keep getting this error. I have the math functions in another class but the variables from form1 are not accessible. Below is my code.

我正在为计算器编写一些代码,但我不断收到此错误。我在另一个类中有数学函数,但无法访问来自 form1 的变量。下面是我的代码。

I've also tried changing my Dim variables to public but that also doesn't work.

我也试过将我的 Dim 变量更改为 public 但这也不起作用。

Public Class Form1

'create a value to keep track of whether the calculation is complete so the calculator can revert to zero for new calculations
Dim state As Integer
'create values to store information on numbers and signs entered as well as the answer returned
Dim one As Double
Dim two As Double
Dim ans As Double
Dim sign As Char

Public Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    'when "Return" or "Enter" Key is selected button 15 is clicked (seems to only work when textbox selected????)
    Me.AcceptButton = Button15

    'change the title of the form
    Me.Text = "Simple Calculator"

    'label the buttons logically
    Button1.Text = "1"
    Button2.Text = "2"
    Button3.Text = "3"
    Button4.Text = "4"
    Button5.Text = "5"
    Button6.Text = "6"
    Button7.Text = "7"
    Button8.Text = "8"
    Button9.Text = "9"
    Button10.Text = "0"
    Button11.Text = "+"
    Button12.Text = "-"
    Button13.Text = "X"
    Button14.Text = "/"
    Button15.Text = "Calc"
    Button16.Text = "About Me"
    Button17.Text = "Clear"

    'allows form to revcieve key events
    Me.KeyPreview = True

End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    'create action when button 1 is clicked

    'if state is 1 then previous calculation was solved, then clear textbox to allow for new input
    If state = 1 Then
        TextBox1.Text = ""

        'insert 1 into textbox
        Dim Int1 As Integer = 1
        TextBox1.Text = TextBox1.Text & Int1

        'return state of calculator to zero to designate that calculation has NOT been solved
        state = 0

    Else
        'else insert 1 into textbox
        Dim Int1 As Integer = 1
        TextBox1.Text = TextBox1.Text & Int1

    End If

End Sub

' the above function for each numbered button

Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

    If state = 1 Then
        TextBox1.Text = ""

        Dim Int2 As Integer = 2
        TextBox1.Text = TextBox1.Text & Int2

        state = 0

    Else
        Dim Int2 As Integer = 2
        TextBox1.Text = TextBox1.Text & Int2
    End If


End Sub

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    If state = 1 Then
        TextBox1.Text = ""

        Dim Int3 As Integer = 3
        TextBox1.Text = TextBox1.Text & Int3

        state = 0

    Else
        Dim Int3 As Integer = 3
        TextBox1.Text = TextBox1.Text & Int3
    End If
End Sub

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click

    If state = 1 Then
        TextBox1.Text = ""

        Dim Int4 As Integer = 4
        TextBox1.Text = TextBox1.Text & Int4

        state = 0

    Else
        Dim Int4 As Integer = 4
        TextBox1.Text = TextBox1.Text & Int4
    End If

End Sub

Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click

    If state = 1 Then
        TextBox1.Text = ""

        Dim Int5 As Integer = 5
        TextBox1.Text = TextBox1.Text & Int5

        state = 0

    Else
        Dim Int5 As Integer = 5
        TextBox1.Text = TextBox1.Text & Int5
    End If

End Sub

Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click

    If state = 1 Then
        TextBox1.Text = ""

        Dim Int6 As Integer = 6
        TextBox1.Text = TextBox1.Text & Int6

        state = 0

    Else
        Dim Int6 As Integer = 6
        TextBox1.Text = TextBox1.Text & Int6
    End If

End Sub

Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click

    If state = 1 Then
        TextBox1.Text = ""

        Dim Int7 As Integer = 7
        TextBox1.Text = TextBox1.Text & Int7

        state = 0

    Else
        Dim Int7 As Integer = 7
        TextBox1.Text = TextBox1.Text & Int7
    End If

End Sub

Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click

    If state = 1 Then
        TextBox1.Text = ""

        Dim Int8 As Integer = 8
        TextBox1.Text = TextBox1.Text & Int8

        state = 0

    Else
        Dim Int8 As Integer = 8
        TextBox1.Text = TextBox1.Text & Int8
    End If

End Sub

Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click

    If state = 1 Then
        TextBox1.Text = ""

        Dim Int9 As Integer = 9
        TextBox1.Text = TextBox1.Text & Int9

        state = 0

    Else
        Dim Int9 As Integer = 9
        TextBox1.Text = TextBox1.Text & Int9
    End If

End Sub

Private Sub Button10_Click(sender As Object, e As EventArgs) Handles Button10.Click

    If state = 1 Then
        TextBox1.Text = ""

        Dim Int0 As Integer = 0
        TextBox1.Text = TextBox1.Text & Int0

        state = 0

    Else
        Dim Int0 As Integer = 0
        TextBox1.Text = TextBox1.Text & Int0
    End If

End Sub

Private Sub Button11_Click(sender As Object, e As EventArgs) Handles Button11.Click

    'create an action for when addition button is clicked
    Try
        'when button is clicked dim sign and text in textbox
        sign = "+"
        one = TextBox1.Text
        TextBox1.Text = ""
    Catch ex As Exception
        TextBox1.Text = "Error" ' if error occurs return error in textbox
        state = 1 'if error occurs return state to 1 to allow for new calculation
    End Try

End Sub

'repeat the above action for remainder of arithmic functions

Private Sub Button12_Click(sender As Object, e As EventArgs) Handles Button12.Click
    Try
        'when button is clicked dim sign and text in textbox
        sign = "-"
        one = TextBox1.Text
        TextBox1.Text = ""
    Catch ex As Exception
        TextBox1.Text = "Error" ' if error occurs return error in textbox
        state = 1 'if error occurs return state to 1 to allow for new calculation
    End Try

End Sub


Private Sub Button13_Click(sender As Object, e As EventArgs) Handles Button13.Click
    Try
        sign = "*"
        one = TextBox1.Text
        TextBox1.Text = ""
    Catch ex As Exception
        TextBox1.Text = "Error" ' if error occurs return error in textbox
        state = 1 'if error occurs return state to 1 to allow for new calculation
    End Try

End Sub

Private Sub Button14_Click(sender As Object, e As EventArgs) Handles Button14.Click
    Try
        sign = "/"
        one = TextBox1.Text
        TextBox1.Text = ""
    Catch ex As Exception
        TextBox1.Text = "Error"
        state = 1 'if error occurs return state to 1 to allow for new calculation
    End Try

End Sub

Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click

    'run functions based on sign stored during calculation
    Try
        two = TextBox1.Text
        If sign = "+" Then
            Calculator2.Math.add()
        ElseIf sign = "-" Then
            Calculator2.Math.minus()
        ElseIf sign = "*" Then
            Calculator2.Math.multiply()
        ElseIf sign = "/" Then
            Calculator2.Math.divide()
        End If

        'if user attempts to divide by zero return divide by zero error in textbox
        If TextBox1.Text = "Infinity" Then
            TextBox1.Text = "Divide by Zero Error"
            state = 1 'if error occurs return state to 1 to allow for new calculation
        End If
    Catch ex As Exception
        TextBox1.Text = "Error"
        state = 1 'if error occurs return state to 1 to allow for new calculation
    End Try

End Sub

Private Sub Button16_Click(sender As Object, e As EventArgs) Handles Button16.Click

    'create message box that provides information about author
    Dim msg = "Student Name: Emily Wong" & vbCrLf & "Student Number: 0692740" ' Define the message you want to see inside the message box.
    Dim title = "About Me" ' Define a title for the message box. 
    Dim style = MsgBoxStyle.OkOnly ' make an ok button for the msg box
    Dim response = MsgBox(msg, style, title)

End Sub

Private Sub Button17_Click(sender As Object, e As EventArgs) Handles Button17.Click

    'create a clear button to clear textboxes when clicked and reset state of calculator
    TextBox1.Text = ""
    state = 0

End Sub

And this is my other class

这是我的另一堂课

Public Class Math
Inherits Form1

'create funtions for add,sub, multiply, and divide features
Sub add()

    ans = one + two 'creates calculation of the entered numbers
    TextBox1.Text = ans 'returns answer into the textbox
    state = 1 'returns state to 1 to show that calculation has occured
End Sub
Sub minus()

    ans = one - two
    TextBox1.Text = ans
    state = 1
End Sub
Sub multiply()

    ans = one * two
    TextBox1.Text = ans
    state = 1
End Sub
Sub divide()

    ans = one / two
    TextBox1.Text = ans
    state = 1
End Sub

End Class

结束班

回答by shf301

stateis a private variable in Form1. You can't access from code outside of Form1. Your Mathclass cannot reference state. Remove the calls to statefrom the Mathclass code. An outside class should not be changing the state of another object in anycase.

state是 中的私有变量Form1。您无法从Form1. 您的Math课程无法引用state. stateMath类代码中删除对 的调用。无论如何,外部类不应更改另一个对象的状态。

回答by Set

Try this instead:

试试这个:

Public Class accounting
Dim Operand1 As Double
Dim Operand2 As Double
Dim [Operator] As String

These are the button from 1 - 0

这些是从 1 - 0 的按钮

Private Sub Button6_Click_1(sender As Object, e As EventArgs) Handles Button9.Click, Button8.Click, Button7.Click, Button6.Click, Button5.Click, Button4.Click, Button19.Click, Button12.Click, Button11.Click, Button10.Click
    txtans.Text = txtans.Text & sender.text
End Sub

This button is for period/point

此按钮用于期间/点

Private Sub Button18_Click(sender As Object, e As EventArgs) Handles Button18.Click
    If InStr(txtans.Text, ".") > 0 Then
        Exit Sub
    Else
        txtans.Text = txtans.Text & "."
    End If
End Sub

This button is for clear or "C" in calculator

此按钮用于清除或计算器中的“C”

Private Sub Button20_Click(sender As Object, e As EventArgs) Handles Button20.Click
    txtans.Text = ""
End Sub

These are for add,subtract,divide, and multiply

这些用于加、减、除和乘

Private Sub Buttonadd_Click(sender As Object, e As EventArgs) Handles Button13.Click
    Operand1 = Val(txtans.Text)
    txtans.Text = ""
    txtans.Focus()
    [Operator] = "+"
End Sub

Private Sub Buttondivide_Click(sender As Object, e As EventArgs) Handles Button15.Click
    Operand1 = Val(txtans.Text)
    txtans.Text = ""
    txtans.Focus()
    [Operator] = "-"
End Sub

Private Sub Buttonsubtract_Click(sender As Object, e As EventArgs) Handles Button16.Click
    Operand1 = Val(txtans.Text)
    txtans.Text = ""
    txtans.Focus()
    [Operator] = "*"
End Sub

Private Sub Buttonmultiply_Click(sender As Object, e As EventArgs) Handles Button14.Click
    Operand1 = Val(txtans.Text)
    txtans.Text = ""
    txtans.Focus()
    [Operator] = "/"
End Sub

This button is for "=" sign

此按钮用于“=”符号

 Private Sub Buttoneequal_Click(sender As Object, e As EventArgs) Handles Button17.Click
    Dim Result As Double
    Operand2 = Val(txtans.Text)

    'If [Operator] = "+" Then
    '    Result = Operand1 + Operand2
    'ElseIf [Operator] = "-" Then
    '    Result = Operand1 - Operand2
    'ElseIf [Operator] = "/" Then
    '    Result = Operand1 / Operand2
    'ElseIf [Operator] = "*" Then
    '    Result = Operand1 * Operand2
    'End If

    Select Case [Operator]
        Case "+"
            Result = Operand1 + Operand2

            txtans.Text = Result.ToString("#,###.00")
        Case "-"
            Result = Operand1 - Operand2
            txtans.Text = Result.ToString("#,###.00")
        Case "/"
            Result = Operand1 / Operand2
            txtans.Text = Result.ToString("#,###.00")
        Case "*"
            Result = Operand1 * Operand2
            txtans.Text = Result.ToString("#,###.00")
    End Select

    txtans.Text = Result.ToString("#,###.00")
End Sub

This button is for backspace effect.

此按钮用于退格效果。

Private Sub Buttondel_Click(sender As Object, e As EventArgs) Handles Button21.Click
    If txtans.Text < " " Then
        txtans.Text = Mid(txtans.Text, 1, Len(txtans.Text) - 1 + 1)
    Else
        txtans.Text = Mid(txtans.Text, 1, Len(txtans.Text) - 1)
    End If
End Sub

Note that "txtans.text" is the textbox where the user inputs and where the output shows.

请注意,“txtans.text”是用户输入和输出显示的文本框。