博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
让控件全屏显示(WinForm)
阅读量:6137 次
发布时间:2019-06-21

本文共 2516 字,大约阅读时间需要 8 分钟。

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; } } } }

转载于:https://www.cnblogs.com/lmcblog/archive/2012/07/14/2591501.html

你可能感兴趣的文章
JAVA入门到精通-第86讲-半双工/全双工
查看>>
bulk
查看>>
js document.activeElement 获得焦点的元素
查看>>
C++ 迭代器运算
查看>>
【支持iOS11】UITableView左滑删除自定义 - 实现多选项并使用自定义图片
查看>>
day6-if,while,for的快速掌握
查看>>
JavaWeb学习笔记(十四)--JSP语法
查看>>
【算法笔记】多线程斐波那契数列
查看>>
java8函数式编程实例
查看>>
jqgrid滚动条宽度/列显示不全问题
查看>>
在mac OS10.10下安装 cocoapods遇到的一些问题
查看>>
angularjs表达式中的HTML内容,如何不转义,直接表现为html元素
查看>>
css技巧
查看>>
Tyvj 1728 普通平衡树
查看>>
[Usaco2015 dec]Max Flow
查看>>
javascript性能优化
查看>>
多路归并排序之败者树
查看>>
java连接MySql数据库
查看>>
转:Vue keep-alive实践总结
查看>>
深入python的set和dict
查看>>