2009-09-23 9 views
0

라이브러리 관리 시스템 용 응용 프로그램을 만들고 있습니다.사용자가 로그 오프 메뉴 항목을 클릭 할 때까지 닫기 단추를 사용하지 않습니다.

처음에 닫기 버튼을 비활성화하고 사용자가 메뉴를 클릭하면 활성화합니다. 항목 로그 오프.

내 응용 프로그램에서이 기능을 수행 할 수있는 방법이 있습니까?

다음 코드를 사용하여 Closing 이벤트를 시도했지만 작동하지 않습니다. 다음과 같이

private void frmLibrary_FormClosing(object sender, FormClosingEventArgs e) 

    { 

    e.Cancel = false; 

    if (checkLogOff == false) 

    { 

    MessageBox.Show("Please Log Off before closing the Application"); 

    e.Cancel = false; 

    this.ControlBox = false; 

    return; 

    } 

    else 

    { 

    this.ControlBox = true; 

    e.Cancel = true; 

    } 

    } 

checkLogOff 변수의 값이 설정됩니다 :

public bool checkLogOff = false; 

    private void logOffToolStripMenuItem_Click(object sender, EventArgs e) 

    { 

    checkLogOff = true; 

    /*Code to update the logoff users in the database*/ 

    } 

내가 확인을 누르면 즉시 내가하지만 대화 상자를 얻고 로그 오프 메뉴 항목을 클릭 해달라고하면 응용 프로그램을 실행 응용 프로그램이 닫히는 메시지 상자의 단추. 하지만 LogOff MenuItem을 클릭하기 전에 사용자가 응용 프로그램을 닫을 수 없도록하고 싶습니다.

이 작업을 수행하는 데 도움을주십시오. 사전에

감사합니다!

+0

음, 양식을 닫을 때 사람들을 로그 오프하지 않는 이유는 무엇입니까? 아니면 그렇게 힘들지는 않습니까? – Will

답변

0

checkLogOff == false로 설정하면 이벤트를 취소하려고하므로 e.Cancel을 true로 설정해야합니다 ( ). checkLogOff == true 일 경우 False로 설정해야합니다.

+0

도움 주셔서 감사합니다. 이제 잘 작동합니다! – Sheetal

1

ControlBox 속성을 사용하면 최대화 및 최소화 단추가 제거되므로이 속성을 사용하지 않아도됩니다. 코드의 주된 문제는 양식이 닫히지 않도록 Canceltrue으로 설정하고 FormClosing으로 설정해야한다는 것입니다. 내가 코드이 감소 할 수 있다고 생각하고, 아직도 당신이 (우리가 ControlBox을 만지지 않는 것이 주어진) 원하는 것을 달성 :

private void frmLibrary_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    e.Cancel = !checkLogOff; 
    if (e.Cancel) 
    { 
     MessageBox.Show("Please Log Off before closing the Application"); 
    } 
} 
+0

도움 주셔서 감사합니다. 이제 잘 작동합니다! 답이 맞지만 정답으로 단 한 명만 표시 할 수 있습니다. 죄송합니다. 어쨌든 귀하의 신속한 도움에 많은 감사드립니다! – Sheetal

0

당신은 e.Cancel

의 설정을 반전

이 있어야합니다 :

e.Cancel = true; 

응용 프로그램을 닫지 않아야하는 경우.

==>

private void frmLibrary_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     e.Cancel = false; 
     if (checkLogOff == false) 
     { 
      MessageBox.Show("Please Log Off before closing the Application"); 
      e.Cancel = true; // <-- 
      this.ControlBox = false; 
      return; 
     } 
     else 
     { 
      this.ControlBox = true; 
      e.Cancel = false; // <-- 
     } 
    } 
1

변경이 : 여기에

MessageBox.Show("Please Log Off before closing the Application"); 
e.Cancel = false; 
this.ControlBox = false; 
return; 

:

MessageBox.Show("Please Log Off before closing the Application"); 
e.Cancel = true; 
this.ControlBox = false; 
return; 

당신은 양식 부하를 취소되지 않습니다.

0

나는 그것이 당신이 찾는 답이 아니라는 것을 알고 있지만, 사용자가 로그를 남기려면 다른 menue 항목으로 가라고 말하고, 단지 응용 프로그램을 닫고 싶다면 cubersome입니다.

왜 로그 오프해야한다고 말합니까? 대신 로그 오프 기능을 호출하거나 로그 오프할지 묻는 대화 상자를 표시 할 수 있습니까?

+0

제안 해 주셔서 감사합니다. LogOff의 코드를 별도의 메서드에 포함 시켰으며 사용자가 폼의 닫기 버튼을 클릭하면 자동으로 호출됩니다. 고마워요. – Sheetal

0

내가보기 엔 당신이 e.CloseReason에 대한 테스트를 제안하고 시스템 종료를 방지 할 수 있습니다, 그렇지 않으면 응용 프로그램 사용자 폐쇄 조치 인 경우에만 취소 로직을 수행하고 대화 '이 지금 작업을 종료' 사용자에게 좋은 인상을주지 못합니다.

관련 문제