C# WinForm中 让控件全屏显示的实现代码

夏荣全 ( lyout(at)163.com )原文 C#中让控件全屏显示的实现代码(WinForm)

有时候需要让窗口中某一块的内容全屏显示,比如视频播放、地图等等。经过摸索,暂时发现两种可行方法,如果有谁知道其他方法,敬请告知

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

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

时间: 2024-10-16 16:53:28

C# WinForm中 让控件全屏显示的实现代码的相关文章

winfrom实现控件全屏效果

用常规方法实现全屏显示时,由于采用的三方控件导致界面顶端一直有一条半透明的类似标题栏的东西无法去除,原因一直没找到. 下面综合整理下网上两位博主的用WindowsAPI实现全屏的方法: 控件全屏显示: http://www.cnblogs.com/lmcblog/archive/2012/07/14/2591501.html 任务栏.开始菜单栏显示隐藏:http://www.cnblogs.com/ITBread/p/3503801.html 我把代码整理下,方便下次自己查看 1.任务栏.菜单栏

Winform中checklistbox控件的常用方法

Winform中checklistbox控件的常用方法最近用到checklistbox控件,在使用其过程中,收集了其相关的代码段1.添加项checkedListBox1.Items.Add("蓝色"); checkedListBox1.Items.Add("红色"); checkedListBox1.Items.Add("黄色"); 2. 判断第i项是否选中,选中为true,否则为falseif(checkedListBox1.GetItemCh

C#winform中使用控件的Dock属性进行布局

想要实现如下布局,可以通过设置控件的Dock属性达到效果 1.拖放一个panel控件一个label控件(放在panel中)和一个treeView控件到TestForm中 2.设置panel的Dock属性为Top(设置BorderStyle属性为FixedSingle,这样显得美观些),设置treeView的Dock属性为Fill 3.需要注意的是要先把panel放到TestForm中,先放treeView就会使得treeView填充TestForm而被后放置的panel遮盖,如下所示 4.想要实

winform中WebBrowser控件执行脚本

在实际应用中我们可能需要WebBrowser控件主动执行我们需要的脚本,执行脚本现在有两种方法. 1.WebBrowser控件加载脚本,简单方便,适用于简短的脚本,无法执行复杂操作. webBrowser.Navigate("javascript:editor.areaToFrame();document.getElementById('articlePostBtn').click();"); 相当于你在浏览器地址栏,直接输入脚本来执行. 2.使用微软提供的动态库,也就是Microso

WinForm中关于控件焦点的问题

方法一: 在打开一个窗体时,我们往往需要设置焦点让光标出现在我们希望它出现的位置上. 这时我们可以在窗体的Activated事件中设置焦点 例如我们希望光标在打开窗体的时候出现在textBox1上,我们只需要在Activated事件中添加如下代码: this.textBox1.Focus(); 即可. Activated事件:当窗体被激活时发生的事件. this.Activated += (sender, e) => {  this.txtCustomerNo.Focus();//光标在文本框控

Winform中Treeview控件失去焦点,将选择的节点设置为高亮显示 (2012-07-16 13:47:07)转载▼

Winform中Treeview控件失去焦点,将选择的节点设置为高亮显示 (2012-07-16 13:47:07)转载▼标签: winform treeview drawnode Treeview控件--Name:tVtypeList将tVtypeList的HideSelection属性设置为False,DrawMode属性设置为OwnerDrawText将tVtypeList的DrawNode事件写为:private void tVtypeList_DrawNode(object sende

【2017-04--28】Winform中ListView控件

ListView控件是一个winform自带的表格型的应用数据展示控件 1.先设置列,设置视图属性选择Details. 添加列,修改列名. 2.编辑项(添加行数据) 添加一个ListViewItem对象,该对象的Text对应着是第一列的数据, 在该对象的SubItems属性的集合中设置该行数据后面几列的值. 3.ListView属性 - Columns 列的集合 - Items 行数据的集合 - FullRowSelect  满行选中 - MultiSelect   是否允许选择多项 - Hid

winform中comboBox控件加默认选项的问题

winform程序设计中,label,TextBox,ComboBox等几个控件几乎是用得最多的,在设计中经常会遇到一些小问题,如:comboBox控件绑定了数据源之后,如何设置默认值? combobox绑定数据源之后是这样的北京             <----默认显示的就是这条上海深圳....想要让它显示成这样请选择城市     <--------要想默认显示这条北京上海深圳 .... 尝试做法: 1.修改了DropDownStyle属性也不起作用. 2.消去数据源直接用  combob

Winform 中DataGridView控件添加行标题

有很多种方法. 1.可以在DataGridView控件中的RowStateChanged事件改变行标题单元格的值(Row.HeaderCell.Value) 1 /// <summary> 2 /// 行状态更改时发生 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 pri