次のように、呼び出しフォームの中央にポップアップするカスタムメッセージボックス(基本的には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節にたどり着きます。type
問題は、変数からフォームインスタンスまたはフォームのIWin32Windowハンドルを取得する方法がわからないことです。型ではなくクラスのインスタンス自体を取得するためにできることはありますか?
大きな編集:お詫びします。親フォームの参照を取得することは子フォームを中央に配置することであると私が言った大きな間違いです。他のことも行うので、MsqBoxインスタンスに親フォームのハンドルが必要です。要するに、私は親が渡されていないという参照なしに子形式の親フォームが必要です。出来ますか?