我们遇到了一个小问题,这让我们很烦恼.让我快速解释一下我们在做什么:
我们正在创建一个Windows窗体,将其另存为.DLL并加载一个MDIContainer.看起来很好,工作正常,但是,如果我们在Form中使用Panel作为组件,它会改变大小.
之前:

之后(在MDIContainer中):

(注意面板!).
我们猜测这是因为我们的自定义MDI容器.这是我们的MDI容器的代码:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace NAMESPACE.Forms
{
class MdiClientPanel : Panel
{
private Form mdiForm;
private MdiClient ctlClient = new MdiClient();
public MdiClientPanel()
{
this.ctlClient.BackColor = Color.LightGray;
base.Controls.Add(this.ctlClient);
}
public Form MdiForm
{
get
{
if (this.mdiForm == null)
{
this.mdiForm = new Form();
System.Reflection.FieldInfo field = typeof(Form).GetField("ctlClient", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
field.SetValue(this.mdiForm, this.ctlClient);
}
return this.mdiForm;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以解决这个问题吗?谢谢你的帮助.
//编辑:添加了赏金,因为我们想知道为什么会这样.你如何重现它:
我目前在C++中定义宏时遇到问题.
我希望这样:
#define MY_MACRO (Name, Address) __int32 Get_Name() { return Address; }
Run Code Online (Sandbox Code Playgroud)
现在,当我这样称呼时:
MY_MACRO(Test, 0x10);
Run Code Online (Sandbox Code Playgroud)
吐出来的
__int32 Get_Name() { return 0x10; }
^^^^
Run Code Online (Sandbox Code Playgroud)
代替
__int32 Get_Test() { return 0x10; }
^^^^
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?我真的需要Get_名字中的名字,然后是参数传递的名字.