C# 让控件全屏显示(WinForm)

转载 2012年03月30日 15:43:53

有时候需要让窗口中某一块的内容全屏显示,比如视频播放、地图等等。。

经过摸索,暂时发现两种可行方法,如果有谁知道其他方法,敬请告知。

1.使用winapi “SetParent” 接口:

        [DllImport("user32.dll", SetLastError = true)]
        static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

 

            control.Dock = DockStyle.None;
            control.Left = 0;
            control.Top = 0;
            control.Width = Screen.PrimaryScreen.Bounds.Width;
            control.Height = Screen.PrimaryScreen.WorkingArea.Height;
            SetParent(control.Handle, IntPtr.Zero);


执行上面的代码后,我们的 control已经可以全屏显示了,但还有一个小问题,我们应该再提供一个功能,让用户按某个键后,退出全屏,要不然关不掉,给谁用都比较郁闷。这个时候应该给控件添加相关事件,取到键后返回。我们以Esc键为例:

        private void AddEventKeyUp(Control control) {
            if (control != null) {
                control.KeyUp += new KeyEventHandler(control_KeyUp);
                foreach (Control c in control.Controls) {// 需要给子控件也添加上,否则有可能取不到。
                    AddEventKeyUp(c);
                }
            }
        }

        void control_KeyUp(object sender, KeyEventArgs e) {
            if (e.KeyCode == Keys.Escape) {
                if (control != null) {
                    SetParent(control.Handle, 原来的parent.Handle);
                    control.Dock = DockStyle.Fill;
                }
            }
        }

修改后的代码如下:

            control.Dock = DockStyle.None;
            control.Left = 0;
            control.Top = 0;
            control.Width = Screen.PrimaryScreen.Bounds.Width;
            control.Height = Screen.PrimaryScreen.WorkingArea.Height;
            AddEventKeyUp(control);
            control.Focus();// 获得焦点,否则也得不到按键
            SetParent(control.Handle, IntPtr.Zero);



2.新建一个窗口,设置 FormBorderStyle为None,WindowState为Maximized,TopMost为True。然后具体代码如下:

            AddEventKeyUp(control);
            原来的parent.Controls.Clear();

            frmFullscreen  frm = new frmFullscreen();
            frm.Controls.Add(control);

            frm.ShowDialog();
        private void AddEventKeyUp(Control control) {
            if (control != null) {
                control.KeyUp += new KeyEventHandler(control_KeyUp);
                foreach (Control c in control.Controls) {
                    AddEventKeyUp(c);
                }
            }
        }

        void control_KeyUp(object sender, KeyEventArgs e) {
            if (e.KeyCode == Keys.Escape) {
                if (control != null) {
                   if (frm != null) {
                        frm.Controls.Clear();
                        原来的parent.Controls.Add(control);// 这里不能和下面的Close顺序错了,要不然会引起错误,因为Close后把控件销毁了。
                        frm.Close();
                        frm = null;
                    }
                }
            }
        }


经过实际使用验证,第二种方法很好,没有任何问题。只是需要多开一个窗口。第一种方法有点小问题,就是如果控件上有右键菜单什么的,一调用 会跑到主界面去了。好像鼠标有时候也不太灵。

版权声明作者:夏荣全
邮箱:lyout(at)163.com
扣扣:249775085
本文版权归作者所有,转载请注明出处:http://www.cnblogs.com/lyout/

相关文章推荐

C# 实现Winform全屏后不遮挡任务栏,显示任务栏

最近在忙中抽闲,看我的桌面太过死了,不生动,不可爱=。=。。 然后默默的想写一个动态桌面的一个小东西活泼一下。。。 随后拿起来了N久不碰的C#(本人C#渣,不,应该说什么都渣。。。) 结果在wi...

C#winform程序窗口全屏是否遮盖任务栏问题

转 http://blog.csdn.net/hbqhdlc/article/details/4499526   在作winform程序时遇到窗口如果全屏时,遮盖任务栏的问题,从网上搜到如...

c#—WinForm/WPF全屏 隐藏标题栏和任务栏

/// /// 全屏按钮 /// /// /// private void button1_Click(obje...

C# winform 全屏玫瑰

  • 2017年06月08日 10:52
  • 39MB
  • 下载

C# winform 全屏

  • 2009年07月01日 10:15
  • 58KB
  • 下载

C# WinForm开发系列之chart控件画折线图和柱形图并自定义鼠标移动到数据标记点显示提示信息

1.首先拖动chart控件到窗体,设置chart1的属性Legends中默认的Legend1的Enable为false; 2.设置Series的ChartType为Line 3.后台绑定数据 ...

C# WinForm开发系列之DataTimePicker控件显示月份的限制和关于DataTimePicker和monthCalendar的样式设置问题

一.首先,在创建的窗体拖入一个dateTimePicker控件,如图1所示: 图1 在Form3窗体加入如下代码控制月份的显示(本例为只显示本月和下个月份时间):   private v...

C# WinForm开发系列之DataRepeater控件的使用(显示数据的基础使用和自定义使用)

为了更加熟悉,尽可能在研究可能会使用到的控件的使用和自定义,下面事一些我研究的关于DataRepeater控件的使用: 1.因为微软自带的DataRepeater的样式不太适实际的使用,所以为了使Da...

C# Winform 左侧菜单右边显示、子窗体显示在主窗体(子窗体当控件添加到Panel)

 Winform 也可以像网站一样左侧显示菜单右边显示点击菜单的子窗体(网页),不过子窗体不能直接显示在主窗体中,因为窗体不是控件。那么能不能把窗体设置为控件?答案是肯定的,只要把窗体的 Doc...
  • xsfqh
  • xsfqh
  • 2015年01月23日 17:58
  • 4371
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C# 让控件全屏显示(WinForm)
举报原因:
原因补充:

(最多只允许输入30个字)