最好的圖像顯示,我可以從MDI父級的邊緣拖動窗體,滾動條出現。C#MDI - 如何防止滾動條?
更像是子窗體被鎖定到父窗體的區域。
我已經找到了一個解決方案,(其中很多都是在2年前回答的,所以我希望它們已經過時了),並且只會遇到檢查移動事件座標的人......很好,但是如果我有20個表格或100個表格怎麼辦?我無法編碼所有這些,它有點傻。當然,我可以在父母表單上設置一個屬性。
最好的圖像顯示,我可以從MDI父級的邊緣拖動窗體,滾動條出現。C#MDI - 如何防止滾動條?
更像是子窗體被鎖定到父窗體的區域。
我已經找到了一個解決方案,(其中很多都是在2年前回答的,所以我希望它們已經過時了),並且只會遇到檢查移動事件座標的人......很好,但是如果我有20個表格或100個表格怎麼辦?我無法編碼所有這些,它有點傻。當然,我可以在父母表單上設置一個屬性。
你可以做這樣的事情...
步驟:你必須作出基本形式(如用戶控件)
,並把這個代碼在形式
namespace Controls
{
public partial class BaseForm : Form
{
public BaseForm()
{
InitializeComponent();
StartPosition = FormStartPosition.WindowsDefaultLocation;
MaximizeBox = false;
Width = 806;
//Width = 850;
//Height = 760;
Height = 730;
//Width = 790;
//Height = 617;
}
protected override void WndProc(ref Message m)
{
const int WM_SYSCOMMAND = 0x0112;
const int SC_MOVE = 0xF010;
//ShowScrollBar(this.Handle, (int)ScrollBarDirection.SB_BOTH, false);
switch (m.Msg)
{
case WM_SYSCOMMAND:
int command = m.WParam.ToInt32() & 0xfff0;
if (command == SC_MOVE)
return;
break;
}
base.WndProc(ref m);
}
}
}
和然後在每種形式你必須這樣指定...
public partial class childform : BaseForm
{
.......
}
請確保您的所有孩子形式的規模是應以鹼形式大小指定
MINSIZE是0,0
最大sixze也0,0
指定startPosition - windowsdefaultlocation
的WindowState - 正常
我希望它將幫助你..
你總是可以覆蓋父類的移動功能,然後讓所有的形式從類繼承。
Theres沒有神奇的API /屬性(我知道,如果我錯了道歉)告訴MDI父母鎖定其範圍內的兒童。
第1步: 你應該創建一個從NativeWindow類繼承的新類並重寫它的WndProc方法。
第2步: 在你的MDI窗體創建這個新類的一個新對象,並通過MDICLIENT控制,它的構造。
第1步代碼:
internal class MyNativeMDIclient : NativeWindow
{
private MdiClient mdiClient;
public MyNativeMDIclient(MdiClient parent)
{
mdiClient = parent;
ReleaseHandle();
AssignHandle(mdiClient.Handle);
}
internal void OnHandleDestroyed(object sender, EventArgs e)
{
ReleaseHandle();
}
private const int SB_BOTH = 3;
[DllImport("user32.dll")]
private static extern int ShowScrollBar(IntPtr hWnd, int wBar, int bShow);
protected override void WndProc(ref Message m)
{
ShowScrollBar(m.HWnd, SB_BOTH, 0 /*false*/);
base.WndProc(ref m);
}
}
第2步代碼:
foreach (Control control in this.Controls)
{
if (control is MdiClient)
{
MyNativeMDIclient nw = new MyNativeMDIclient(control);
break;
}
}
這是原生的Windows MDI支持的代碼鍵行爲,你不能把它關掉。這是一個從上個世紀開始的窗口模型,當用戶使用低分辨率顯示器時。考慮另一個。 –
@HansPassant,還有其他的? :)請你舉個例子。 – Doomsknight
我不知道「以前的centry」;至少MS Excel 2007是MDI(雖然一半僞裝成一個單一文檔界面,當你明顯看到它是MDI時,它會在我遇到這些情況時將我嚇壞了)。許多應用程序使用單文檔界面;幾個不同的電子郵件客戶端(Thunderbird,Outlook等)的UI看起來非常適合您的基本UI模型,並且很多用戶將熟悉基本的交互模型。 –