マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

など、デザイナを持つUIサブシステムの開発環境で発生する。

Windows Forms

原因

この結果が、*.Designer.cs(vb)に出力される
VisualStudio?デザイナの仕様であるため、
子コントロールの二重登録のような問題が起きてしまう。

対策

InitLayout?イベント・ハンドラ

このため、対策としては、InitLayout?イベント・ハンドラをオーバ ライドして
Formやカスタム コントロールの初期化処理を同梱するという方法が有用である。

Designプロパティ

また、Designプロパティを使用してデザイン時と実行時を判別できる。

考察

Windows Formsでは、デザイン専用コードを実装する必要が無いため、
ASP.NET Web Formsのケースより簡単にデザイン時と実行時の表示を一致させることが出来るが、
製品レベルの作り込みで、通常、ユーザ・プログラムでここまでの実装は行わない方が無難であると考える。

ASP.NET Web Forms

対策の概要

ロード イベントに処理を移動

デザイン サポート コードを実装

GetDesignTimeHtml?メソッドからVisual Studioデザイナに表示するHTMLを返すことで対応する。

詳細

原因

カスタムのRadioButtonList?コントロールのタグ内に、
子コントロール(ListItem?)のコレクションのタグが出力される。

<my_wcc:WebCustRadioButtonList ID="WebCustRadioButtonList1" runat="server" Width="340px">
  <asp:ListItem Value="選択項目1">選択項目1</asp:ListItem>
  <asp:ListItem Value="選択項目2">選択項目2</asp:ListItem>
  <asp:ListItem Value="選択項目3">選択項目3</asp:ListItem>
</my_wcc:WebCustRadioButtonList>

この実装の状態で、Visual Studioデザイナでコントロールのサイズを変更したところ、

Visual Studioデザイナ上での表示が下記のような、意図せぬ表示となる問題が発生する。

<my_wcc:WebCustRadioButtonList ID="WebCustRadioButtonList1" runat="server" Width="340px">
  <asp:ListItem Value="選択項目1">選択項目1</asp:ListItem>
  <asp:ListItem Value="選択項目2">選択項目2</asp:ListItem>
  <asp:ListItem Value="選択項目3">選択項目3</asp:ListItem>
  <asp:ListItem Value="選択項目1">選択項目1</asp:ListItem>
  <asp:ListItem Value="選択項目2">選択項目2</asp:ListItem>
  <asp:ListItem Value="選択項目3">選択項目3</asp:ListItem>
</my_wcc:WebCustRadioButtonList>

これは、Visual Studioデザイナ上でコンストラクタが2回実行され、
DataSource?ListItem?が2回追加されたためである。

対策

考察

一致させるには複雑な実装が必要になる。


Tags: :.NET開発, :UIサブシステム, :Windows Forms, :ASP.NET Web Forms


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS