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

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2010年 9月 28日 (火) 07:45:10 JST


uparrowです。

藤井さま、返答ありがとうございます。

> 現時点では、Controlが重複してしまうのでダメなままですが、
> 対応方法を考えてみます。
> 少し時間をください。
今すぐに必要というわけではないので問題ありません。

> ただ、ユーザコントロールにも手を加える必要が出てくるかも
> しれませんが、そのときは相談させていただきます。
了解いたしました。

よろしくお願いいたします。

> 藤井です。
> 
> ありがとうございます。
> どういうイメージなのか、理解できました。
> 
> 現時点では、Controlが重複してしまうのでダメなままですが、
> 対応方法を考えてみます。
> 少し時間をください。
> 
> ただ、ユーザコントロールにも手を加える必要が出てくるかも
> しれませんが、そのときは相談させていただきます。
> 
> 
> (2010/09/27 9:45), [E-MAIL ADDRESS DELETED]さんは書きました:
> > uparrow	です。
> > 
> > 藤井 様
> > ご連絡いただき、ありがとうございます。
> > 
> >> というわけなので、回避するにはコントロール名が重複しないようにすること
> >> なのですが、ユーザコントロールを利用するときにはそうはいかないですよね?
> > フォーム内に同じユーザコントロールを3つ4つ使用する画面がたくさんあるので
> > それぞれ、ユーザコントロールを作成し、ユーザコントロール内のコントロール名を
> > 別にするというのはちょっと厳しいです。
> > 
> >> どう対応するか色々考えていたのですが、個人的にはユーザコントロールを利用
> >> してS2Formをつかったことがなく、そもそもどういうPONOクラスを作れば、
> >> S2Formにバインドできるのか、すいませんが、よくわかっていないのです。
> > 今行っている方法が良いか悪いかわからないのですが、次のようにしています。
> > 
> > txtServiceCode 、 txtServiceName
> > のテキストボックスコントロールを持つユーザコントロール
> > controlService1,controlService2
> > がフォームに存在する場合、バインドするPONOのクラスは
> > 
> > public string ServiceCode1 { get; set; }
> > public string ServiceCode2 { get; set; }
> > 
> > としており、Control属性に以下を記載しております。
> > [Control("controlService1", "ServiceCode", "ServiceCode1")]
> > [Control("controlService2", "ServiceCode", "ServiceCode2")]
> > 
> > ユーザコントロール内のtxtServiceCode、txtServiceNameとバインドするように
> > PONOを作ればいいのでしょうが、複数controlServiceがあると
> > おかしな挙動をしてしまうので、
> > ユーザコントロールのプロパティとバインドするようにしました。
> > 
> > このユーザコントロールでは、ServiceCodeの値をtxtServiceCodeに設定し
> > 対応する名称をtxtServiceNameに設定する等の処理を行っています。
> > 
> > したがって、ControlModifier属性を使ってしまうと、ユーザコントロール内部の
> > テキストボックスもバインドされてしまうので、恥ずかしながら、全てのバインドする
> > コントロールをControl属性で指定しております。
> > 
> > 現在開発中のプロジェクトでは、1.3.17を使っており、テストフェーズに入ったので
> > このバージョンを使おうと思うのですが、一部、コントロール数が多く
> > S2Formでのバインドを利用していない箇所があります。
> > 次の案件では1.3.18をできれば使いたいと考えており、このような質問に至っております。
> > 
> > ユーザコントロールを用いる場合にバインドするいい方法がわかると助かります。
> > 
> > よろしくお願いいたします。
> > 
> >> コミッタの藤井です。
> >>
> >> 返事が遅くなって申し訳ありません。
> >>
> >> ご指摘通り、同一名のコントロールを複数登録しようとすると、エラーに
> >> なります。
> >> これは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 mailing list
> >> [E-MAIL ADDRESS DELETED]
> >> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> > 
> > 
> > 
> > _______________________________________________
> > seasar-dotnet mailing list
> > [E-MAIL ADDRESS DELETED]
> > https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> > 




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