2011-09-29 12 views
1

사용자가 단추를 클릭하면 사용자가 암호를 입력하는 곳에 새 양식이 생성됩니까? 사용자 이름의 메모리 내 사본을 어떻게 보관할 수 있습니까?VB에서 전역 변수 선언

예를 들어 웹 양식에서는 Session ("사용자") 만 사용할 수 있습니다. winforms로 어떻게 이것을 복제 할 수 있습니까?

감사

+1

FYI : 가능한 한 많이하지 말고 대신 응용 프로그램에서 정보를 전달해야합니다. – JohnFx

+2

존 (John)이 말한 것보다 강하다. 당신은 필요가 없습니다. –

+0

신청서와 관련된 정보를 어떻게 전달합니까? 필자는 공용 함수를 사용하여 시도했지만 다른 형식을 통해 변수를 전달하는 것 같지 않습니다. – user765942

답변

6
당신은 (VB .NET의 경우 Shared) 정적 객체

예를 사용할 수

Public Class SessionInformation 

    Public Shared Property UserPassword As String 

End Class 

그런 다음이 때문에

SessionInformation.UserPassword 

를 호출하여이 액세스 할 수 있습니다 이것이 유효한 구현인지 여부를 둘러싼 몇 가지 관심사가 될 것 같습니다. 이것이 왜 최선의 방법이 아닌지 설명하십시오.

SessionInformation의 단일 인스턴스를 만듭니다. 즉, 프로그램의 어느 부분에서든지 변경되면 프로그램의 나머지 부분에 영향을줍니다.

데이터베이스 (SQL, Access, 파일 등)를 사용하여 나중에 검색하려는 개체의 메모리 부족 복사본을 유지 관리하지 않으면 개체 지속성을 유지하는 것이 어려울 수 있습니다 . 이를 구현하는 가장 쉬운 방법은 응용 프로그램 폴더에 있고 표준 T-SQL을 사용하여 필요한 정보를 저장하는 SQLCE 데이터베이스를 사용하는 것입니다. 그러나 암호의 경우 이는 보안 문제로 인해 이상적 일 수 있습니다.

또는 로그인 및 로그 아웃하는 더 좋은 방법은 System.Security.Principal 네임 스페이스를 사용하여 애플리케이션 용 사용자를 만드는 것입니다.

+0

감사합니다. 어떻게 구현할 것인가? – user765942

+2

죄송합니다, downvoting이. 그러한 코드를 정당화하는 유효한 디자인은 없습니다. 전역 정보가 아닌 적절한 정보 전달 메커니즘을 사용하십시오. 또는 전역 적 상태가 정말로 필요한 경우 올바른 레지스트리를 구현하여 단일 액세스 지점을 얻으십시오. –

+0

@ KonradRudolph 그것이 System.Security.Principal을 사용하여 언급 한 이유는 사용자 상태를 수행하는 방법으로 구축 되었기 때문에 내가 육체를 원하는 것입니다. 글로벌 액세스를 위해 정적 변수를 사용하는 것이 좋지는 않지만 그는 어떻게해야 하는지를 물었다. – msarchet

0

양식에 공용 변수가 있고 양식을 언로드하지 않고 formname.variablename (양식 수준에서 공용으로 정의)을 사용하여 해당 양식에서 데이터를 가져옵니다.

공개로 설정하면 컨트롤을 사용하여이 작업을 수행 할 수도 있습니다.

비행 전 : OP 문제가 해결 되었으면 좋았을 때, 좋을 때 또는 다른 것이 다른 문제 일 때마다 해결됩니다.

1

웹 응용 프로그램의 Session 개체와 동일한 작업이 필요하지 않습니다. 세션은 웹 응용 프로그램이 실제로 프로세스 경계를 ​​넘어 변수에 액세스해야하기 때문에 필요합니다 (= 웹 응용 프로그램의 세션은 사용자의 웹 서버에 대한 여러 요청을 포함하며, 각 요청은 새로운 응용 프로그램을 시작했습니다!).

"일반"응용 프로그램에서는 그렇지 않습니다. 로컬 변수가 아닌 변수는 모두 해당됩니다. 특별한 경우 암호 양식에 사용자 이름이 들어있는 속성이 있어야합니다.

Public ReadOnly Property Username() As String 
    Get 
     ' Return the value of the username textbox field. 
     Return UsernameInput.Text 
    End Get 
End Property 

우리는 더 많은 것을 얻을 수 : 이런 일이의 PasswordForm 내부

' The caller looks something like this: 

Dim pw As New PasswordForm() 
pw.ShowDialog() ' Display the dialog, and wait until the user has dismissed it. 
Dim theUsername = pw.Username 

: 사용자는 사용자 이름을 검색 할 수 있습니다 사용자 이름과 암호이 암호 형태의 발신자를 입력 정교하지만 이것이 할 것입니다.

응용 프로그램에서 사용자 이름을 다시 사용해야하는 경우 사용자에 대한 다른 정보 (작업중인 내용 ... ...)를 공유해야 할 수 있습니다. 즉, 응용 프로그램의 상태 인이며 대개 해당 상태를 나타내는 개체가 있습니다. 이것은 사용자 이름을 저장할 올바른 장소입니다.

응용 프로그램에 하나의 다른 양식 ("기본 대화 상자") 만있는 경우 해당 양식의 개인 변수를 사용하여 사용자 이름을 저장하면됩니다. 전역 변수가 필요 없습니다.