2009-03-02 3 views
1

ページ内からユーザーコントロールのパブリックメソッドを呼び出すにはどうすればよいですか?ユーザーコントロール内のパブリックメソッドc#.net

ページ上のOnInit内でコントロールを動的に読み込みます。何らかの理由で、公開されているにもかかわらず、メソッドが存在しないというビルドエラーが発生しています。ユーザーコントロールがすべての面倒を見る価値があるとは考え始めません。

+0

@gnomixa:どうやって電話をしていますか?それはオブジェクトのタイプですか?動的に作成しているのであれば、それは私に反映されます。この場合、メソッドが既知のインターフェース(基本クラスまたはインターフェース)上にない限り、リフレクションを通してメソッドを呼び出す必要があります。 – casperOne

答えて

5

あなたはfracTemplateCtrl isFracTemplateCtrlとして宣言され、そうVisual Studioは、それがTestMethod()を持っていることを知っていることを

FracTemplateCtrl fracTemplateCtrl = 
    (FracTemplateCtrl)LoadControl("FracTemplateCtrl.ascx") 
fracTemplateCtrl.TestMethod(); 

注意を言う必要が

Control fracTemplateCtrl = 
    (FracTemplateCtrl)LoadControl("FracTemplateCtrl.ascx") 
fracTemplateCtrl.TestMethod(); 

を言いました。 Controlと宣言されている場合、ビジュアルスタジオはこの仮定をすることはできません。

+0

@gnomixa:問題ありません。疑問を持ってコードを投稿した方が、はるかに迅速に回答を得ることができました。 ;] –

1

ユーザーコントロールを正しい種類にキャストしていますか?

1

サンプルコードがないと、確かに言うことは難しいですが、UserControlへの参照をカスタムコントロールの特定のタイプにキャストする必要があると思います。ユーザーコントロールのタイプは「PersonControl」である場合たとえば、その後、あなたのコードは次のようになります:あなたのクラスは、UserControlから継承され

PersonControl ctl = (PersonControl)LoadControl("PersonControl.ascx"); 
ctl.DoCustomMethod(); 
+0

キャストしようとしましたが、どちらも動作しませんでした: コントロールfracTemplateCtrl =(FracTemplateCtrl)LoadControl( "FracTemplateCtrl.ascx"); Form.Controls.Add(fracTemplateCtrl); Response.Write(fracTemplateCtrl.TestMethod()); TestMethodが見つからないというエラーです – sarsnake

+0

fracTemplateCtrlもキャストに加えてFracTemplateCtrl型である必要があります。このコメントのコードは、Controlタイプの変数に対してTestMethodを呼び出そうとしています。 –

0

場合は、他の人が持っているように、あなたがそれにアクセスしているときことを確認してください言った、あなたは正しくキャストしている。たとえば:

フォームで
public MyControl : UserControl 
{ 
    public void MyMethod(){...} 
} 

private MyControl mycontrol = new MyControl(); 
private void MainForm() 
{ 
    this.Controls.Add(mycontrol); 

    InitializeComponent(); 
} 

private void DoStuff() 
{ 
    ((MyControl)mycontrol).MyMethod(); 
} 
0

マイクの答えはどのように行うのですが、Visual Studioは、ユーザーコントロールクラスを検出について少しグラグラすること、およびタイプがないと文句を言うことができます存在する。そのような状況では、web.configで参照される可能性があるにもかかわらず、ページに<% @Reference %>タグを追加して強制的に認識させる必要があります。

関連する問題