2011-10-31 2 views
0

63 개의 양식을 가진 vb.net 응용 프로그램을 만들었습니다. 각 양식에 label2은 응용 프로그램을 사용하여 사용자 이름을 포함해야합니다. 사용자에게 표시되는 첫 번째 양식은 로그인 양식입니다. 이 양식에서 사용자가 로그인 버튼을 클릭하면 새로 열린 모든 창에서 사용자 이름이 label2 안에 표시됩니다. 어떻게해야합니까?루프를 통해 다른 양식에 액세스하고 vb.net에서 레이블 텍스트를 변경하는 방법

답변

0

우선 내가 미래에 userLabel과 같이 관리 할 수있는 무언가로 컨트롤과 레이블의 이름을 변경하는 것이 좋습니다.

편집 :

응용 프로그램에 대한 그들은 (아직) 존재하지 않는 귀하의 로그인 폼 표시하면 다른 창을 열지 않은 따라서 당신이 그들을 통해 루프 수 없거나 상태를 변경합니다.

많은 수의 양식이 있으므로 반복적 인 코드가 많이 필요없는 솔루션을 찾아야합니다. 다른 사람들은 해결책이 될 수있는 MDI 창을 제안했습니다. 또 다른 솔루션은 사용자가 생성 한 사용자 정의 로그인 사용자 정의 컨트롤입니다.

이러한 사용자 지정 컨트롤을 만드는 것은 어렵지 않습니다. 필요에 따라 스타일을 지정하고 나중에 필요할 때 더 많은 기능을 추가 할 수도 있습니다 (예 : 로그 아웃 링크). 이 사용자 정의 컨트롤의 Load 이벤트에서 (정적 속성 또는 다른 메커니즘을 통해) 로그인 한 사용자 이름을 검색하고 그 내부에 표시 할 수 있습니다.

이렇게하면 사용자 이름을 표시하고 나머지는 자동으로 작동하는 모든 양식에이 사용자 정의 컨트롤을 배치해야합니다. 사용자 컨트롤을 만드는 방법에 대한 도움말은 Google에서 많은 자습서가 있으며 기본적으로 양식을 만드는 것과 같습니다.

+0

로그인 양식이 첫 번째 양식이며, 하나의 양식을 한 번에 볼 수 ... 난 그냥 사용자 이름입니다 표시 할 기능 : 여기

코드입니다 , label.text로 누가 응용 프로그램에 로그인했는지 ... 사용자가 로그인 할 때 모든 양식에 레이블 텍스트를 설정하고 싶습니다. – user944591

+0

좋아요, 제 응답에 도움이되는 정보를 추가했습니다. 귀하의 질문을 편집하여 귀하가 방금 말씀하신 정보를 추가하고 필요한 정보를 다른 사람들이 쉽게 이해할 수 있도록했습니다. 한 가지 대답에 만족하면 수용된 대답으로 표시하십시오. 이것은 비슷한 문제를 가진 다른 사람들을 도우며 당신을 도운 사람들에게 보상을줍니다. – aKzenT

0

디자인에 각 양식의 레이블이 필요한 경우가 아니면 MDI 컨테이너를 기본 양식으로 사용하고이 양식의 맨 아래에 상태 표시 줄을 추가 한 다음 사용자 이름을 하나로 저장하는 것이 좋습니다 상태 표시 줄 필드

이렇게하면 사용자가 알고있는 한 위치에서 사용자 정보를 사용할 수 있고 레이블이있는 중요한 화면 공간을 차지하지 않으므로 새로운 양식에 대해 염려 할 필요가 없습니다.

디자인에 각 양식의 레이블이 필요한 경우 폼 각각에서 상속되는 기본 클래스를 만드는 것이 좋습니다. Load 이벤트 양식 중에 Form의 Controls 컬렉션에있는 Find 메서드를 사용하여 사용자 이름을 포함하는 레이블을 찾고 설정할 수 있습니다 (레이블 이름이 모두 동일한 것으로 가정 함). 예를 들어

: 난 강력하게 어떤 일관되고 쉽게 인식 방식으로 당신의 컨트롤을 명명에 대한 악 젠트에 동의

Dim oLabel As Label 

oLabel = TryCast(Me.Controls.Find("label2", True), Label) 

If oLabel IsNot Nothing Then 
    oLabel.Text = globalusername 
End If 
0

A.. 현대적이고 빠른 시스템의 장점 중 하나는 코드에서 변수 및 클래스를 설명하는 이름을 사용할 수 있다는 것입니다. :-)

B. 여러 가지 방법으로 문제에 접근 할 수 있습니다. 63 가지 양식 모두를 반복하는 것이 그 중 하나이지만, 가장 효과적이고 효과적이며 유지 보수가 용이하지 않습니다.

C. 로그인을 어떻게 처리하고 있는지 확실하지 않으므로 사용자가 로그인 양식에서 확인을 클릭 한 후 어떤 일이 발생하는지 확신 할 수 없습니다. 직접 로그인 처리를 설정 했습니까? 아니면 내장 인증을 사용하고 있습니까?

Competent_tech는 상속을 제안하는 올바른 길에 있습니다.한 단계 더 나아가 My.Application 기능을 사용하여 전역 변수를 포함 할 수 있습니다. 프로젝트 속성 창/응용 프로그램/응용 프로그램 이벤트보기로 이동하십시오. 다음 코드 파일이 표시됩니다. 표시된 코드를 추가

Namespace My 

    Partial Friend Class MyApplication 


     'Add THIS code block: 
     Private _CurrentUserName As String = "Current User" 
     Public Property CurrentUserName() As String 
      Get 
       Return _CurrentUserName 
      End Get 
      Set(ByVal value As String) 
       _CurrentUserName = value 
      End Set 
     End Property 

    End Class 

End Namespace 

지금, 로그인 양식과 같이 응용 프로그램 변수를 설정할 수 있습니다

Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click 
    My.Application.CurrentUserName = Me.UsernameTextBox.Text 
    'YOUR LOGIN CODE HERE . . . 
    Me.Close() 
End Sub 

는 My.Application 모듈 내에서 클래스를 생성하지 마십시오./뉴 클래스 다음 새 클래스를 생성 추가/프로젝트를 사용 System.Windows.Forms.Label에서 상속, 다음과 같이 (안 My.ApplicationEvents 모듈 내!) :

Public Class MyUserLabel 
    Inherits System.Windows.Forms.Label 

    Public Sub New() 
     Me.Text = My.Application.CurrentUserName 
    End Sub 
End Class 

당신은 빌드해야합니다 MyUserLabel 컨트롤이 도구 상자에 표시되기 전에 프로젝트에 적용됩니다. 빌드가 끝나면 컨트롤을 폼에 끌어다 놓을 수 있습니다. 또는 "전체 프로젝트"로 설정된 범위로 찾기/바꾸기를 사용할 수 있습니다.

위의 코드를 사용하면 MyUserLabel의 인스턴스가 각 인스턴스의 .Text 속성을 초기화시 (디자인 모드에서도) My.Application.CurrentUser 변수로 표시되는 값으로 설정하게됩니다.

그런 다음 모든 양식에서 Label2를 MyUserLabel로 바꿉니다 (범위를 지정하여 전체 프로젝트로 찾기 및 바꿀 수 있습니다).

희망이 있습니다.

 Namespace My 

' The following events are availble for MyApplication: 
' 
' Startup: Raised when the application starts, before the startup form is created. 
' Shutdown: Raised after all application forms are closed. This event is not raised if the application terminates abnormally. 
' UnhandledException: Raised if the application encounters an unhandled exception. 
' StartupNextInstance: Raised when launching a single-instance application and the application is already active. 
' NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected. 
Partial Friend Class MyApplication 

    'Add THIS code block: 
    Private _CurrentUserName As String = "Current User" 
    Public Property CurrentUserName() As String 
     Get 
      Return _CurrentUserName 
     End Get 
     Set(ByVal value As String) 
      _CurrentUserName = value 
     End Set 
    End Property 
    Public Class MyUserLabel 
     Inherits System.Windows.Forms.Label 

     Public Sub New() 
      Me.Text = My.Application.CurrentUserName 
     End Sub 
    End Class 


End Class 

최종 네임 스페이스

+0

나는 위의 코드를 시도하고 프로젝트를 빌드 한 후에 도구 상자에서 새 컨트롤을 볼 수 없다. ... mod1이라는 이름의 모듈에서 public 클래스를 만들었습니다 ..... 그리고 또한 내가 두 개의 텍스트 상자와 로그인 버튼으로 사용자 정의 만든 로그인 양식을 사용하고 있다고 언급하고 싶습니다. – user944591

+0

오류 목록을보십시오. 프로젝트가 성공적으로 구축 되었습니까? MyUSerLable이 도구 상자에 나타나서는 안됩니다. 일반적으로 선택 화살표와 함께 "구성 요소"또는 "프로젝트 네임 스페이스 구성 요소"에 있습니다. – XIVSolutions

+0

또한 공용 변수를 전역 변수로 사용할 수없는 이유는 없습니다. 코드를 더 쉽게 사용/유지 관리 할 수 ​​있도록 이름을 바꾸는 것이 좋습니다. 그러나 My.Application 네임 스페이스는 더 논리적 인 장소입니다. . . – XIVSolutions

관련 문제