模态“对话框”usercontrol c#

时间:2013-08-02 19:03:46

标签: c# windows-ce modal-dialog

我正在开发一个项目,用于在 Windows CE 5.0 嵌入式系统上创建具有用户界面的计算机。关于windows form和c#我真的不太好。这就是我要求你帮助的原因。

我正在使用用户控件而不是表单,因为他们在Closing和on Showing 上进行了奇怪的过渡。所以我决定在一个主窗体中使用多个用户控件作为全屏选项卡。问题是我必须在某些情况下使用具有模态行为的用户控件。我看到了 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 个答案:

答案 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对话框的子类,它使用的是自己的updateParent onClose()。最后,它会阻止代码的执行继续,直到用户控件关闭。