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)

C# 让控件全屏显示(WinForm) 有时候需要让窗口中某一块的内容全屏显示,比如视频播放、地图等等。。 经过摸索,暂时发现两种可行方法,如果有谁知道其他方法,敬请告知。 1.使用winap...
  • hls19880214
  • hls19880214
  • 2013年11月30日 11:54
  • 519

C# 笔记4——如何实现单击放大全屏和退出全屏

C# 笔记4——如何实现单击放大全屏和退出全屏 由于工作需求,需要实现单击放大和退出全屏功能,想了一下,即单击放大时候把播放视频的picturebox的大小设置和屏幕宽高相同、位置设置为屏幕左上角(...
  • u011127242
  • u011127242
  • 2016年08月31日 10:40
  • 1747

C#winform窗体中如何点击移动某个控件来移动窗体

当我们把窗体设成无边框的时候,这个时候我们该怎么样去移动窗体呢,
  • lutaoquan
  • lutaoquan
  • 2014年08月11日 09:42
  • 632

C#之winform设置控件居中

在C#的窗体编程,winfrom里面,原生控件卧槽般的坑爹,没有居中这种属性,这是很恶心的一件事情。对比java的窗体,有不少布局是支持设置居中的,android更不用说。而winfrom这家伙没有。...
  • Mingyueyixi
  • Mingyueyixi
  • 2017年02月13日 01:48
  • 7437

C#启动时全屏显示窗体...

this.FormBorderStyle = FormBorderStyle.None;     //设置窗体为无边框样式   this.WindowState = FormWindowState....
  • friendan
  • friendan
  • 2012年03月13日 21:10
  • 8529

C# Winform 怎么让按钮在Panel里居中显示

把pannel里面的多个按钮的那个anchor属性全部去掉,如下图: 再用VS2010自带的工具调一下即可:...
  • xunzaosiyecao
  • xunzaosiyecao
  • 2014年03月20日 20:04
  • 11608

WinForm实现全屏方法

1、实现窗体全屏显示方法:在全屏方法中进行如下操作this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;this.Windo...
  • lianchangshuai
  • lianchangshuai
  • 2011年04月15日 11:31
  • 15297

C# WinForm控件的拖动和缩放的实现

转自:http://blog.csdn.net/joyhen/article/details/8572505 C# WinForm控件的拖动和缩放是个很有用的功能。实现起来其实很简单的,主要是设...
  • u012252959
  • u012252959
  • 2016年01月22日 17:23
  • 2533

winform 中panel动态添加控件坐标原点问题

最近在写winform程序的时候遇到一个小问题,目标效果是类似QQ的聊天对话框,每发送一条消息会在界面上显示发送方的头像、发送气泡、以及消息内容...
  • u012989023
  • u012989023
  • 2015年04月30日 19:08
  • 2436

winform禁用控件,但不让控件变为灰色

[System.Runtime.InteropServices.DllImport("user32.dll ")] public static extern int SetWindow...
  • qq_21420429
  • qq_21420429
  • 2016年04月25日 15:55
  • 401
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C# 让控件全屏显示(WinForm)
举报原因:
原因补充:

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