[seasar-dotnet:1807] Re: [S2Container]ユーザコントロール利用時の問題について

Hiroaki Fujii [E-MAIL ADDRESS DELETED]
2010年 9月 27日 (月) 00:10:45 JST


コミッタの藤井です。

返事が遅くなって申し訳ありません。

ご指摘通り、同一名のコントロールを複数登録しようとすると、エラーに
なります。
これはDictionaryにコントロールを保持しておいて、再度バインドするときに
再びコントロールを探しに行くのを防ぐためです。
そのDictinaryのキーがコントロール名です。
というわけなので、回避するにはコントロール名が重複しないようにすること
なのですが、ユーザコントロールを利用するときにはそうはいかないですよね?

どう対応するか色々考えていたのですが、個人的にはユーザコントロールを利用
してS2Formをつかったことがなく、そもそもどういうPONOクラスを作れば、
S2Formにバインドできるのか、すいませんが、よくわかっていないのです。

よろしければ教えていただけないでしょうか?


(2010/09/23 10:11), [E-MAIL ADDRESS DELETED]さんは書きました:
> uparrowと申します。
> 
> いままで、S2Container.NET 1.3.17を利用しておりました。
> たくさんのコントロールを利用しているフォームがあったため、速度改善のため
> 1.3.18で動作の検証を行ってみました。
> 
> そうしたところ、実行時に以下のような例外が発生し
> そのままでは正しく動作しませんでした。
> 
> System.ArgumentException: 同一のキーを含む項目が既に追加されています。
>     場所 System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
>     場所 System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
>     場所 System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)
>     場所 Seasar.Windows.S2Form._GetAllControls(Control controls, IDictionary`2 table)
>     場所 Seasar.Windows.S2Form._GetAllControls(Control controls, IDictionary`2 table)
>     場所 Seasar.Windows.S2Form._SetDataToControls()
>     場所 Seasar.Windows.S2Form.set_DataSource(Object value)
> ......
> 
> どうやら同一のユーザコントロールを複数使用している場合このエラーが発生するようでした。
> 
> コードと名称をユーザコントロールに貼り付け、このコントロールを
> 同一フォームに2つ以上貼り付けている箇所がいくつかあります。
> 例えば、txtServiceCode と txtServiceName のテキストボックスを
> ユーザコントロールServiceControlとして作成しておき、
> フォームにserviceControl1とserviceControl2の同じユーザコントロールを複数貼る場合です。
> 
> このような場合はどのように対応するのが良いのでしょうか。
> ユーザコントロールを使わず、フォームにコントロールを直接置けば
> 何も問題ないのですが、いろいろとユーザコントロールに作り込んでいるので、
> できれば、ユーザコントロールを利用して対応可能な方法があればよいなと思います。
> 
> よろしくお願いいたします。
> 
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> 



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