好吧,我刚刚完成了几个相关问题的检查,其中一个似乎有了答案,但是链接已经破了,另一个没有得到很好的陈述。
当一个孩子移到父母的边界之外时,我只是想删除mdi父级上的滚动条。
http://img224.imageshack.us/img224/4788/mdiscrollbars.jpg
我想要完成的是重现可以出现在mmo中的菜单,您可以在屏幕上移动和移出屏幕。我认为它有多种形式,但如果我错了或者我正在努力,请纠正我。
答案 0 :(得分:1)
这样的事情怎么样?你得到轻微的闪烁,但我确信有一个解决方法:
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace WindowsFormsApplication6
{
public partial class Form1 : Form
{
private const int SB_BOTH = 3;
private const int WM_NCCALCSIZE = 0x83;
[DllImport("user32.dll")]
private static extern int ShowScrollBar(IntPtr hWnd, int wBar, int bShow);
protected override void WndProc(ref Message m)
{
if (mdiClient != null)
{
ShowScrollBar(mdiClient.Handle, SB_BOTH, 0 /*Hide the ScrollBars*/);
}
base.WndProc(ref m);
}
MdiClient mdiClient = null;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
foreach (Control c in this.Controls) //Find the MdiClient in the MdiWindow
{
if (c is MdiClient)
{
mdiClient = c as MdiClient;
}
}
Form2 newChild = new Form2();
newChild.MdiParent = this;
newChild.Show();
}
}
}
答案 1 :(得分:0)
我发现this使用了互操作。
该链接还显示了如何防止子表单移出mdi父级的边框。
链接中提供的代码可以解决问题,但您必须添加以下using指令:
using System.Runtime.InteropServices;
正如链接线程中所提到的,有一点闪烁,但你可能想尝试一下。
答案 2 :(得分:-1)
这是更简单的方法,没有轻弹。看看这个:
protected override void WndProc(ref Message m)
{
if (m.Msg != 3)
{
base.WndProc(ref m);
}
}