GcZoomを配置したフォームを非表示にすると名前のないプロセスとウィンドウが生成される
対象製品
MultiTouch for Windows Forms 1.0J
状況
修正済み
詳細
GcZoomコンポーネントを配置したフォームをHideメソッドを使用して非表示に設定すると、名前のないプロセスが2つ生成されます。
その場合、Alt+Tabキーで表示されるアプリケーション切替ウィンドウに、名前のないプロセスが2つ表示されます。
その場合、Alt+Tabキーで表示されるアプリケーション切替ウィンドウに、名前のないプロセスが2つ表示されます。
回避方法
この問題はService Pack 3(v1.0.2015.1127)で修正されました。
不具合を修正した最新のサービスパックは、アップデートページ からダウンロードできます。
また、Form.Hideメソッドを実行する前に、GcZoom.Targetプロパティにnull(VBの場合はNothing)を設定することで解決できます。
以下はForm1のHideメソッド、Showメソッドを使用してフォームの表示、非表示を行う場合の回避方法の例です。
[Visual Basic]
Public Class Form1
Public _form As Form1 = Nothing
' 回避方法(1/4) - start
Public BackFromZoomFactor As Single
Public BackFromScrollLocation As Point
' 回避方法(1/4) - end
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim from1 As New Form1()
from1._form = Me
' 回避方法(2/4) - start
from1.BackFromScrollLocation = Me.GcZoom1.ScrollLocation
from1.BackFromZoomFactor = Me.GcZoom1.ZoomFactor
' 回避方法(2/4) - end
from1.Show()
Me.GcZoom1.Target = Nothing ' 回避方法(3/4)
Me.Hide()
End Sub
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
If _form IsNot Nothing Then
' 回避方法(4/4) - start
_form.GcZoom1.Target = _form
_form.GcZoom1.ZoomFactor = BackFromZoomFactor
_form.GcZoom1.ScrollLocation = BackFromScrollLocation
' 回避方法(4/4) - end
_form.Show()
End If
End Sub
End Class
[C#]
public partial class Form1 : Form
{
public Form1 _form = null;
// 回避方法(1/4) - start
public float BackFromZoomFactor;
public Point BackFromScrollLocation;
// 回避方法(1/4) - end
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form1 form1 = new Form1();
form1._form = this;
// 回避方法(2/4) - start
form1.BackFromScrollLocation = this.gcZoom1.ScrollLocation;
form1.BackFromZoomFactor = this.gcZoom1.ZoomFactor;
// 回避方法(2/4) - end
form1.Show();
this.gcZoom1.Target = null; // 回避方法(3/4)
this.Hide();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (_form != null)
{
// 回避方法(4/4) - start
_form.gcZoom1.Target = _form;
_form.gcZoom1.ZoomFactor = BackFromZoomFactor;
_form.gcZoom1.ScrollLocation = BackFromScrollLocation;
// 回避方法(4/4) - start
_form.Show();
}
}
}
不具合を修正した最新のサービスパックは、アップデートページ からダウンロードできます。
また、Form.Hideメソッドを実行する前に、GcZoom.Targetプロパティにnull(VBの場合はNothing)を設定することで解決できます。
以下はForm1のHideメソッド、Showメソッドを使用してフォームの表示、非表示を行う場合の回避方法の例です。
[Visual Basic]
Public Class Form1
Public _form As Form1 = Nothing
' 回避方法(1/4) - start
Public BackFromZoomFactor As Single
Public BackFromScrollLocation As Point
' 回避方法(1/4) - end
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim from1 As New Form1()
from1._form = Me
' 回避方法(2/4) - start
from1.BackFromScrollLocation = Me.GcZoom1.ScrollLocation
from1.BackFromZoomFactor = Me.GcZoom1.ZoomFactor
' 回避方法(2/4) - end
from1.Show()
Me.GcZoom1.Target = Nothing ' 回避方法(3/4)
Me.Hide()
End Sub
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
If _form IsNot Nothing Then
' 回避方法(4/4) - start
_form.GcZoom1.Target = _form
_form.GcZoom1.ZoomFactor = BackFromZoomFactor
_form.GcZoom1.ScrollLocation = BackFromScrollLocation
' 回避方法(4/4) - end
_form.Show()
End If
End Sub
End Class
[C#]
public partial class Form1 : Form
{
public Form1 _form = null;
// 回避方法(1/4) - start
public float BackFromZoomFactor;
public Point BackFromScrollLocation;
// 回避方法(1/4) - end
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form1 form1 = new Form1();
form1._form = this;
// 回避方法(2/4) - start
form1.BackFromScrollLocation = this.gcZoom1.ScrollLocation;
form1.BackFromZoomFactor = this.gcZoom1.ZoomFactor;
// 回避方法(2/4) - end
form1.Show();
this.gcZoom1.Target = null; // 回避方法(3/4)
this.Hide();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (_form != null)
{
// 回避方法(4/4) - start
_form.gcZoom1.Target = _form;
_form.gcZoom1.ZoomFactor = BackFromZoomFactor;
_form.gcZoom1.ScrollLocation = BackFromScrollLocation;
// 回避方法(4/4) - start
_form.Show();
}
}
}
キーワード
MTTK11225