если форму надо встроить как контрол в другое окно, то как вариант, можно сделать следующее:
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
public partial class MainForm : Form
{
public MainForm()
{
this.Menu = new MainMenu(new MenuItem[] {
new MenuItem("Trace", new EventHandler(Trace)),
});
}
private void Trace(object sender, EventArgs e)
{
IChildFormProxy cfa = new ChildFormProxy();
cfa.SetParent(this.Handle);
}
}
public interface IChildFormProxy
{
void SetParent(IntPtr hwnd);
}
public class Win32Window : IWin32Window
{
public Win32Window(IntPtr hwnd)
{
_Handle = hwnd;
}
public IntPtr Handle
{
get { return _Handle; }
}
private IntPtr _Handle;
}
public class ChildFormProxy : IChildFormProxy
{
public void SetParent(IntPtr hwnd)
{
ChildForm cf = new ChildForm(hwnd);
cf.Show();
}
}
public class ChildForm : Form
{
public ChildForm(IntPtr parentHwnd)
{
this.FormBorderStyle = FormBorderStyle.FixedSingle;
this.ControlBox = false;
this.TopLevel = false;
this.BackColor = System.Drawing.Color.Red;
_ParentHwnd = parentHwnd;
}
private IntPtr _ParentHwnd;
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.Parent = _ParentHwnd;
return cp;
}
}
}
если parentHwnd будет передавать в форму не через конструктор, то надо вызвать метод RecreateHandle, см. здесь.
Данное сообщение получено с сайта GotDotNet.RU
Последний раз редактировалось 15 October 2007 10:10
|