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

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2010年 10月 8日 (金) 09:43:39 JST


uparrowです。

藤井さま、ご対応いただきありがとうございます。

早速試してみました。問題なく想定の動作をしております。

> >> また、サードパーティ製のツールなどを使った環境では試せてません。
こちらについては、サードパーティ製のコントロールは使用していないため
試すことができません。

これで、現在作成済みのユーザコントロールを変更しなくとも
バインド速度改善の恩恵を受けることができそうです。

ありがとうございました。

> 藤井です。
> 
> fpさま、ありがとうございます。
> 
> 少し、補足説明があります。
> 
> > 次に、このPONOをセットするプロパティをユーザコントロールに作成します。
> > つまり、このPONOの型を持っているServiceCodeというプロパティをユーザ
> > コントロールに作ります。
> 
> と、書きましたが、このServiceCodeというプロパティにはこのPONOの値を
> ユーザコントロールが持つコントロールに割り当て、また取得する実装が
> 必要になります。
> 
> イメージ的には、Gridタイプコントロールみたいな感じでしょうか。
> 
> よろしくお願いいたします。
> 
> 
> 
> (2010/10/08 0:14), fpさんは書きました:
> > fpです。
> > 
> > 藤井さん、こんばんは。
> > 
> > 1.3.18 でのバインド速度改善のご対応ありがとうございます。
> > 
> > この 1.3.18 での対応の元発言をしておきながら
> > 御礼や検証報告等ができておらず申し訳ありません。
> > 
> > 実は当方でも uparrowさんの投稿と同時期にこの問題を
> > 認識しておりましたが、良い対応方法が見つからず
> > 成り行きを見守っていました。
> > 
> > すぐとはいかないですが検証させて頂きます。
> > 
> > 
> > 
> > (2010/10/07 23:14), Hiroaki Fujii wrote:
> >> uparrow さま
> >>
> >> 藤井です。
> >>
> >> 遅くなってすいません。
> >>
> >> ユーザコントロールを対応させてみました。
> >>
> >> まだ正式リリースではないので、SVNからソースを取得してビルドを
> >> お願いします。
> >>
> >> 注意事項として次の点があります。
> >> ・ユーザコントロールの中にはバインドしていない。
> >> ・ユーザコントロールの内容のPONOを用意する必要がある。
> >>
> >> 頂いた例を用いますと、まず、ユーザコントロールの
> >>
> >>>> txtServiceCode 、 txtServiceName
> >>
> >> に対応したPONOを別に用意してください。
> >>
> >> 次に、このPONOをセットするプロパティをユーザコントロールに作成します。
> >> つまり、このPONOの型を持っているServiceCodeというプロパティをユーザ
> >> コントロールに作ります。
> >>
> >> 次に、作成したS2Formの継承フォームに
> >>>> [Control("controlService1", "ServiceCode", "ServiceCode1")]
> >>>> [Control("controlService2", "ServiceCode", "ServiceCode2")]
> >> を宣言してください。
> >>
> >> 次に、S2FormにバインドするPONOにServiceCode1とServiceCode2の
> >> プロパティを用意しますが、このプロパティの型は最初に用意した
> >> ユーザコントロールにセットするPONOになります。
> >>
> >> 以上の手順になります。
> >> 少し、イメージと違っているかもしれませんが、私なりのご返事と
> >> させていただきました。
> >> また、サードパーティ製のツールなどを使った環境では試せてません。
> >>
> >> まだ、ドキュメントができていないので、よくわからないときは
> >> 質問してください。
> >> また、ご自身の環境で不具合があれば、不具合内容を報告いただけると
> >> 助かります。
> >>
> >> 他の皆様にも、不具合があれば、ご報告いただけると非常に助かります。
> >>
> >> よろしくお願いいたします。
> >>
> >>
> >>
> >> (2010/09/28 6:51), Hiroaki Fujiiさんは書きました:
> >>> 藤井です。
> >>>
> >>> ありがとうございます。
> >>> どういうイメージなのか、理解できました。
> >>>
> >>> 現時点では、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 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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet

-- 
<[E-MAIL ADDRESS DELETED]>



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