2013-08-02 3 views
0

Windows CE 5.0 임베디드 시스템에 사용자 인터페이스가있는 컴퓨터를 만드는 프로젝트를 진행하고 있습니다. 나는 윈도우 폼과 C#에 대해서는별로 좋지 않다. 그래서 내가 네 도움을 요청하는거야.모달 "대화 상자"usercontrol C#

닫는 부분에 이상한 전환 을 표시 했으므로 양식 대신 사용자 정의 컨트롤을 사용하고 있습니다 (). 그래서 하나의 메인 폼에서 전체 화면 탭으로 여러 사용자 컨트롤을 사용하기로 결정했습니다. 문제는 어떤 상황에서는 모달 동작으로 사용자 정의 컨트롤을 사용해야한다는 것입니다. 나는 C# 코드를 보았지만, C# WPF 또는 ASP.NET (나는 똑같은지 모른다.). C#에서는 모달 대화 상자처럼 동작하는 사용자 정의 컨트롤을 만드는 방법이 있습니다. 나는 앨러 배마 showdialog 함수를 추가한다. 부모 함수가 호출 될 때 부모 함수를 차단하는 방법을 모른다. 사전에 내 영어 감사합니다 죄송합니다

public abstract partial class cDialog : UserControl, Transparency_Background // Alpha 
    { 

     cDialog _mFather; 

     protected Bitmap _mBackgroundImage; 

     public cDialog() 
     { 

      _mBackgroundImage= new Bitmap(Properties.Resources.logo); 

      InitializeComponent(); 

      btn_exit.Text = Fs.mMemory.GetVocabulary(eVocabulary.X); 

     } 


     private void cDialog_Paint(object sender, PaintEventArgs e) 
     { 

      e.Graphics.DrawImage(_mBackgroundImage, 0, 0); 

     } 

     protected virtual void CloseDialog(object sender, EventArgs e) 
     { 
      if (_mFather!= null) 
      { 

       _mFather.Show(); 

       _mFather.TopLevelControl.Controls.Remove(this); 
      } 

     } 

     public virtual void ShowDialog(cDialog father) 
     { 

      _mFather = father; 

      if (_mFather!= null) 
      { 
       _mFather.TopLevelControl.Controls.Add(this); 

       this.BringToFront(); 

       base.Show(); 

       _mParent.Hide(); 
      } 

     } 


     protected override void OnPaintBackground(PaintEventArgs e) 
     { 
      //Do nothing Double buffering See Alpha.cs 
     } 

, 알렉스.

+1

모달 대화 상자는 다른 창을 활성화하려고 시도 할 수 없다는 것을 사용자가 알 수 있도록 대화 상자처럼보아야합니다. Form.ShowDialog만이 의미가 있습니다. 상자에 사용자를 함정하려면 Enabled 속성을 false로 설정하면됩니다. –

+0

대화 상자로 사용할 수 없다면 usercontrol이 닫히거나 비활성화 될 때까지 실행 코드를 중지시킬 수있는 다른 방법이 있습니까? –

답변

0

내 사용자 컨트롤 모달을 만드는 것과 다른 해결책을 찾았습니다. 나는 에서 CDialog를 새로운 클래스를 추가하기로 결정 :

public abstract class cSubExecutionDialog 
{ 
     public abstract UpdateParent(); 
} 

를하고 난 내 대화 가까운 방법에 추가 :

protected virtual void CloseDialog(object sender, EventArgs e) 
{ 
    if (_mFather!= null) 
    { 

     _mFather.Show(); 

     _mFather.TopLevelControl.Controls.Remove(this); 

     _mFather.SubExe.UpdateParent(); 

     } 


} 

전에서 onShow()를 호출하기 전에 그래서, 난의 하위 클래스를 생성 cSubExecution 대화 상자이며 자체 updateParent onClose()를 사용합니다. 마지막으로 사용자 컨트롤이 닫힐 때까지 코드의 실행을 계속하지 못하게합니다.