GcApplicationZoomを使用した時、子フォームの表示と非表示を繰り返すとStackOverflowExceptionが発生する
対象製品
MultiTouch for Windows Forms 1.0J
状況
修正済み
詳細
GcApplicationZoomを使用したフォームから、別のフォームを繰り返し表示するとStackOverflowExceptionが発生します。
本現象は、次のように同じインスタンスでフォームを表示する時に発生します。新しいインスタンスでフォームを表示する場合は発生しません。
[サンプルコード]
Form subForm;
private void button1_Click(object sender, EventArgs e)
{
if (subForm == null)
{
subForm = new Form2();
}
subForm.ShowDialog(this);
}
本現象は、次のように同じインスタンスでフォームを表示する時に発生します。新しいインスタンスでフォームを表示する場合は発生しません。
[サンプルコード]
Form subForm;
private void button1_Click(object sender, EventArgs e)
{
if (subForm == null)
{
subForm = new Form2();
}
subForm.ShowDialog(this);
}
回避方法
この問題はService Pack 3(v1.0.2015.1127)で修正されました。
不具合を修正した最新のサービスパックは、アップデートページ からダウンロードできます。
また、次のようにフォームのインスタンスを毎回作成することで回避することができます。
private void button1_Click(object sender, EventArgs e)
{
using (Form f = new Form2())
{
f.ShowDialog(this);
}
}
同じインスタンスで使う必要がある場合は、次のようにフォームを閉じた後GcZoomコンポーネントをデタッチすることで回避できます。
Form subForm;
private void button1_Click(object sender, EventArgs e)
{
if (subForm == null)
{
subForm = new Form2();
}
subForm.ShowDialog(this);
GrapeCity.Win.MultiTouch.GcApplicationZoom.GetGcZoom(subForm).Target = null;
}
不具合を修正した最新のサービスパックは、アップデートページ からダウンロードできます。
また、次のようにフォームのインスタンスを毎回作成することで回避することができます。
private void button1_Click(object sender, EventArgs e)
{
using (Form f = new Form2())
{
f.ShowDialog(this);
}
}
同じインスタンスで使う必要がある場合は、次のようにフォームを閉じた後GcZoomコンポーネントをデタッチすることで回避できます。
Form subForm;
private void button1_Click(object sender, EventArgs e)
{
if (subForm == null)
{
subForm = new Form2();
}
subForm.ShowDialog(this);
GrapeCity.Win.MultiTouch.GcApplicationZoom.GetGcZoom(subForm).Target = null;
}
キーワード
MTTK11169