2012-11-14 4 views
2

여기서 stackoverflow에 대한 답변을 찾을 수 없어서 여기에 설명되어 있습니다. 하위 폼의 단추를 클릭 할 때 MenuStrip 하위 항목의 텍스트를 변경하려고합니다. 아래는 내 서브 양식에있는 제출 단추의 코드입니다. 클릭하면 "Log In"텍스트가 "Log Out"으로 변경됩니다. 코드는 괜찮아 보이고 오류는 없지만 텍스트를 업데이트하지는 않습니다.다른 양식 단추에서 양식 메뉴 항목의 텍스트를 변경하는 방법

public AccessForm() 
{ 
    InitializeComponent(); 
} 

private void btnSubmit_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     if (txtUser.Text == "admin" && txtPass.Text == "1234") 
     { 
      MessageBox.Show("Access granted.", "Access"); 

      playgroundPlannersForm mainForm = new playgroundPlannersForm(); 

      mainForm.logInToolStripMenuItem.Text = "Log Out"; 
      this.Close(); 

     } 
     else 
     { 
      MessageBox.Show("Incorrect Username or Password.", "Warning"); 
      txtUser.Clear(); 
      txtPass.Clear(); 
      txtUser.Focus(); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show("Message: " + ex, "Error"); 
    } 
} 

private void btnCancel_Click(object sender, EventArgs e) 
{ 
    this.Close(); 
} 
+0

당신은 거의 올바른 생각을 가지고 있습니다. 우선 속성을 만들고 응용 프로그램/양식의 구조에 따라 달라집니다. 다른 양식의 인스턴스를 만들 때 부모/소유자를 사용하여 MDI를 조사 할 것입니다. 버튼 텍스트를 기반으로 확인 또는 Switch 문을 수행하면 여러 가지 방법으로이 작업을 수행 할 수 있습니다. – MethodMan

+0

제발 이런 식으로하려고하지 마십시오. 메뉴 항목의 상태와 같은 것을 제어하는 ​​기본 객체 모델이 있어야합니다. 하위 폼에서이를 변경할 수 있으며 기본 폼이 반응 할 수 있습니다. 양식이나 컨트롤에서 UI 요소를 변경하지 * 않습니다. 코드는 매우 빠르게 관리하기 어려워집니다. – siride

답변

1

기본 폼의 새 인스턴스를 만들고 변경합니다. 원래 양식에 대한 참조를 전달하고이를 사용하여 업데이트해야합니다.

여기에 한 가지 방법이 있습니다. 당신의 서브 형태로 ..이 속성 추가 : 위의 코드에서

public playgroundPlannersForm ParentForm { get; set; } 

..then를, 이것을 사용 :

MessageBox.Show("Access granted.", "Access"); 

//playgroundPlannersForm mainForm = new playgroundPlannersForm(); <--- not needed anymore 

ParentForm.logInToolStripMenuItem.Text = "Log Out"; 

를 기본 형태로, 당신은 당신의 하위 폼을 표시하기 전에 .. 이렇게 :

SubForm subform = new SubForm(); 
subform.ParentForm = this; 
subform.Show(); 

이는 부모를 양식을 만드는 양식 (코드에 따라 올바른 양식)으로 설정합니다. 또한 양식 디자이너 코드로 가서 loginToolStripMenuItem을 public으로 설정해야 할 수도 있습니다 (아직없는 경우).

관련 문제