我有一个自定义消息框(基本上是一个 winform),它会在调用表单的中心弹出,如下所示:
public partial class Form1 : Form
{
private void button1_Click(object sender, EventArgs e)
{
MsgBox.Show(this, "asdsdfsdf");
}
}
在这里,我将this
(Form1) 作为MsgBox
. 现在我知道了 MsgBox 表单的位置,因为我也传递了父表单 ( Form1
)。
但是即使从其他类调用,我也需要这个自定义消息框来对齐自身(中心到父表单),例如,
public class Computer
{
public void Do(int i)
{
MsgBox.Show(i.ToString());
}
}
这里的问题是我无法将父表单的引用传递给MsgBox
类。所以在这里我将无法定位自定义框。我想要的是让MsgBox
类确定调用堆栈中的最后一个表单类的能力?
我试过这个:
public partial class MsgBox : Form
{
private void X()
{
StackTrace df = new StackTrace();
foreach (var item in df.GetFrames())
{
var type = item.GetMethod().DeclaringType;
if (type.BaseType == typeof(Form))
{
IWin32Window w = //how to get the form instance here??
//------------
break;
}
}
}
}
我确实了解了内部 if 子句;问题是我不知道如何从变量中获取表单实例或表单的 IWin32Window 句柄type
。我可以做些什么来获取类的实例本身而不是类型?
一个大编辑:抱歉,这是我犯的一个大错误,我说获取父表单的引用是将子表单居中。我需要在 MsqBox 实例中处理父表单的句柄,因为它也可以做其他事情。简而言之,我需要子表单中的父表单,而没有传递父表单的引用。可能吗?