- PR -

System.Web.UI.Design.ControlDesignerのOnComponentChangedイベントにつきまして

1
投稿者投稿内容
たなすぺ
常連さん
会議室デビュー日: 2003/06/23
投稿数: 35
投稿日時: 2005-02-25 12:48
毎々大変お世話になっております。

現在、カスタムコントロールの作成を行って
いるのですが、下記現象につきましてご質問させて頂きます。

================================================================
Aクラス:カスタムコントロールクラス
Bクラス:Aクラスのデザイナークラス

Aクラスのプロパティ変更時に下記処理を実現させたいと思います。

Aクラスのプロパティには【1】、【2】、【3】が
存在する。

【1】のプロパティが変更された際、Bデザイナクラスの
OnComponentChangedイベントで【2】、【3】のプロパティを
変更したい。
その際、下記のようなコーディングを行っています。

public override void OnComponentChanged(object sender,System.ComponentModel.Design.ComponentChangedEventArgs ce)
{
  if (【1】のプロパティ == "")
  {
   【2】のプロパティ == ""
   【3】のプロパティ == ""

  }
  base.OnComponentChanged (sender, ce);
}

上記コーディングでは確かにIDEのプロパティウィンドゥ上
Aクラスのプロパティには【2】、【3】は変更されています。
しかし、デザイン時のHTMLソースを確認すると、
【2】、【3】のプロパティは変更されず、設定が残ってしまいます。
【2】、【3】のプロパティをプロパティウィンドゥから
直接変更した際は、デザイン時のHTMLソースにも反映されます。
================================================================

プロパティ変更時に、他プロパティを変更し、かつ
HTMLソースも変更することは可能でしょうか。

ご存知の方がいらっしゃいましたら
ご教授の程、宜しくお願い致します。


壱丸3
常連さん
会議室デビュー日: 2004/09/13
投稿数: 34
投稿日時: 2005-02-28 16:48
ComponentDesigner.RaiseComponentChanged メソッドを明示的に
呼び出すことで、実現できそうです。
あまりきれいではないですが・・・、ご参考まで。

コード:

using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.Design;
using System.Web.UI.WebControls;
using System.ComponentModel.Design;

namespace ClassLibrary1
{
[ToolboxData("<{0}:MyCustomControl runat=server></{0}:MyCustomControl>"), Designer(typeof(MyDesigner))]
public class MyCustomControl : WebControl
{
internal MyDesigner designer;

public string Text1
{
get
{
return (string)ViewState["Text1"];
}
set
{
ViewState["Text1"] = value;
if (value == "")
{
this.Text2 = "";
this.Text3 = "";
}
if (designer != null) this.designer.InvokeRaiseComponentChanged();
}
}

public string Text2
{
get
{
return (string)ViewState["Text2"];
}
set
{
ViewState["Text2"] = value;
}
}

public string Text3
{
get
{
return (string)ViewState["Text3"];
}
set
{
ViewState["Text3"] = value;
}
}
}

public class MyDesigner : ControlDesigner
{
private MyCustomControl destControl;

public override void Initialize(IComponent component)
{
base.Initialize(component);
this.destControl = (MyCustomControl)base.Component;
this.destControl.designer = this;
}

public override string GetDesignTimeHtml()
{
string ret = string.Empty ;
ret += string.Format("Text1:{0}<BR>", this.destControl.Text1);
ret += string.Format("Text2:{0}<BR>", this.destControl.Text2);
ret += string.Format("Text3:{0}<BR>", this.destControl.Text3);
return ret;
}

public void InvokeRaiseComponentChanged()
{
base.IsDirty = true;
base.RaiseComponentChanged(null, "", "");
}
}
}



[ メッセージ編集済み 編集者: 壱丸3 編集日時 2005-02-28 18:35 ]
1

スキルアップ/キャリアアップ(JOB@IT)