2013-08-02 5 views
0

Я работаю над проектом для создания машины с пользовательским интерфейсом на Windows CE 5.0 встроенная система. Я не очень хорошо разбираюсь в форме Windows и C#. Вот почему я прошу вас о помощи.Модальный «диалог» usercontrol C#

Я использую пользовательский контроль вместо формы, потому что они делали странный переход на закрытие и показ. Поэтому я решил использовать несколько пользовательских элементов управления как полноэкранную вкладку в одной основной форме. Проблема в том, что я должен использовать пользовательский элемент управления с модальным поведением в некоторой ситуации. Я видел кучу кода для C#, но это было C# WPF или ASP.NET (я не знаю, если это то же самое). Итак, есть ли способ в C# создать пользовательский контроль, действующий как модальный диалог. Я alerady добавляю функцию 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

Если я не могу использовать его в качестве диалога, есть ли другой способ остановить исполняемый код, пока пользовательский контроль не будет закрыт или не отключен? –

ответ

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 и его использование - собственное обновлениеParent onClose(). Наконец, это предотвращает выполнение кода до тех пор, пока пользовательский элемент управления не будет закрыт.

Смежные вопросы