[seasar-dotnet:1537] Re: [S2Windows.NET]Quillを使用してモーダレスフォームを表示

koyak [E-MAIL ADDRESS DELETED]
2010年 1月 12日 (火) 23:47:56 JST


uparrowさん

小谷です。

PjViewImageFormを閉じるときにどんな処理を呼んでいるでしょうか?

モーダレス(Show)でフォームを開いている場合、
閉じるのにCloseメソッドをお使いになっているとリソースが解放され、
再表示しようとするとSystem.ObjectDisposedExceptionとなるはずです。
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.form.close.aspx

Closeの代わりにHideメソッドやVisibleプロパティにfalseを設定する、
といった方法を試してみていただけないでしょうか。

> 最終的には、メインの画面に複数のボタンを配置し、ボタンに関連する画像の
> フォームを複数表示したいと考えております。

Quillのインスタンスは一つの型につき一つまでのため、
複数表示する場合は
・画像ごとに別のフォームを用意する
・QuillではなくS2Containerの方を使う(インスタンス管理はprototypeあど)
(http://s2container.net.seasar.org/ja/dicontainer-reference.html#InstanceMode)
・S2Windows.NETを使わずに通常の方法でフォームを表示させる
などの対策が必要かもしれません。

2010年1月12日14:23  <[E-MAIL ADDRESS DELETED]>:
> uparrowと申します。
>
> Quillを使ってWindowsFormの画面遷移の制御を行っております。
> 今まで作成した画面遷移はモーダルフォームで特に問題なく利用できております。
>
> このたび、メインのフォームからボタンを押下するたび、指定したパスの画像を
> 表示したフォームをいくつも表示するような機能を作成しており、
> 画像を表示するフォームはモーダレスのフォームで作成しました。
>
> ■FormDispatcherインターフェイス
>    [Implementation]
>    [Aspect(typeof(QuillFormInterceptor))]
>    public interface IViewImageFormDispatcher
>    {
>        [TargetForm(typeof(PjViewImageForm), ModalType.Modaless)]
>        void ShowImage(string ImageFilePath);
>    }
>
> このようにインタフェースを作成し、
> メインの画面からボタンを押下すると、PjViewImageFormのフォームが表示され
> ます。
> このフォームを閉じてから、再度ボタンを押下すると、
> System.ObjectDisposedException はハンドルされませんでした。
>  Message="破棄されたオブジェクトにアクセスできません。\r\nオブジェクト名 'PjViewImageForm' です。"
> というようなエラーが発生してしまいます。
>
> モーダレスをモーダルにすると、フォームを表示、閉じるを繰り返しても
> エラーは発生しません。
>
> モーダレスの時はなにか特別な設定ややり方があるのでしょうか?
> そもそも、使い方が正しくないのでしょうか?
>
> お教えいただけると助かります。
>
> 最終的には、メインの画面に複数のボタンを配置し、ボタンに関連する画像の
> フォームを複数表示したいと考えております。
>
> よろしくお願いいたします。
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


seasar-dotnet メーリングリストの案内