トップ回答者
タスクバーにタスクが表示されない

質問
-
はじめまして。
現在、
Form1 -> Form2
という画面遷移において、
public partial class Form1 : Form { ... private void button1_Click(object sender, EventArgs e) { ... IHoge hoge = (IHoge)Assembly.LoadFrom([DLL ファイルパス]).CreateInstance("Hoge"); hoge.Owner = this; Hide(); hoge.Run([パラメータ1], [パラメータ2]); Show(); } ... } public abstract class AHoge : IHoge { ... private Form owner; ... public abstract Wizard CreateWizard(); ... public Form Owner { get { return owner; } set { owner = value; } } ... public void Run(int prm1, int prm2) { ... Wizard wizard = null; try { ... wizard = CreateFormWizard(); wizard.ShowDialog(Owner); ... } finally { ... if (null != wizard) { wizard.Dispose(); } ... } } ... } public class Hoge : AHoge { ... public override Wizard CreateWizard() { return new Form2(); } ... } public partial class Wizard : Form { ... } public partial class Form2 : Wizard { ... }
という実装をしています。
これを動作させるとForm2を表示した際にタスクバーからタスクが消えてしまいます。
Form1、および、Form2のShowInTaskbarプロパティは true になっています。
Form2内でHide() -> Show()を行うとタスクバーにタスクが表示されます。
デバッグでForm2内でHide() -> Show()の前後で違いを見てみましたが、
【実施前】
ownerWindow:null
【実施後】
ownerWindow:TaskbarOwnerと同じハンドル
という差異があることまでは判りました。
しかし、このownerWindowメンバーを直接操作することはできません。
また、何故差異があるのかが判りません。
ご存知の方がいらっしゃいましたら原因、対策等の情報をご提供いただけますでしょうか。
回答
-
(まずはじめに、今すぐ回答が出せる方は、この投稿を無視して回答してください。)
想像でコードを補完し、ちょっと試してみました。が、情報が足りず同じ状態に持っていけませんでした。
まず、同じ状態を再現するために、以下、必要な情報をください。
1.「タスクバーからタスクが消える」というのは、Form1,Form2いずれのタスクも表示されないということでしょうか?
(想像で補って書いてみたコードではForm1のbutton1_Click後Form2のタスクは表示されていました。From2という文字はタスクに表示されませんでしたが。)
2.最小限のコードをください。
・IHogeはインターフェースだと思うのですが、その定義内容を教えて下さい。
・Assembly.LoadFrom([DLL ファイルパス])とされている部分ですが、Hogeクラスは別dllにすればいいですか?どこまでをdllとして切り分けているのか教えて下さい。
・public void Run(int prm1, int prm2)の引数は今回必要無いですよね。など、今回のケースに対し、不要な部分は削ってください。
・また、上記メソッド内のwizard = CreateFormWizard();はCreateWizard();のことですよね。など、コードに間違いがないか確認おねがいします。
・あと、「...」はコピペしたいので消しておいてもらえると助かります。
・最後に念のため、ご利用のVisualStudioと.NETフレームワークのバージョンも教えて下さい。
以上、よろしくおねがいします。
すべての返信
-
(まずはじめに、今すぐ回答が出せる方は、この投稿を無視して回答してください。)
想像でコードを補完し、ちょっと試してみました。が、情報が足りず同じ状態に持っていけませんでした。
まず、同じ状態を再現するために、以下、必要な情報をください。
1.「タスクバーからタスクが消える」というのは、Form1,Form2いずれのタスクも表示されないということでしょうか?
(想像で補って書いてみたコードではForm1のbutton1_Click後Form2のタスクは表示されていました。From2という文字はタスクに表示されませんでしたが。)
2.最小限のコードをください。
・IHogeはインターフェースだと思うのですが、その定義内容を教えて下さい。
・Assembly.LoadFrom([DLL ファイルパス])とされている部分ですが、Hogeクラスは別dllにすればいいですか?どこまでをdllとして切り分けているのか教えて下さい。
・public void Run(int prm1, int prm2)の引数は今回必要無いですよね。など、今回のケースに対し、不要な部分は削ってください。
・また、上記メソッド内のwizard = CreateFormWizard();はCreateWizard();のことですよね。など、コードに間違いがないか確認おねがいします。
・あと、「...」はコピペしたいので消しておいてもらえると助かります。
・最後に念のため、ご利用のVisualStudioと.NETフレームワークのバージョンも教えて下さい。
以上、よろしくおねがいします。