ページ内からユーザーコントロールのパブリックメソッドを呼び出すにはどうすればよいですか?ユーザーコントロール内のパブリックメソッドc#.net
ページ上のOnInit内でコントロールを動的に読み込みます。何らかの理由で、公開されているにもかかわらず、メソッドが存在しないというビルドエラーが発生しています。ユーザーコントロールがすべての面倒を見る価値があるとは考え始めません。
ページ内からユーザーコントロールのパブリックメソッドを呼び出すにはどうすればよいですか?ユーザーコントロール内のパブリックメソッドc#.net
ページ上のOnInit内でコントロールを動的に読み込みます。何らかの理由で、公開されているにもかかわらず、メソッドが存在しないというビルドエラーが発生しています。ユーザーコントロールがすべての面倒を見る価値があるとは考え始めません。
あなたはfracTemplateCtrl is
がFracTemplateCtrl
として宣言され、そうVisual Studioは、それがTestMethod()
を持っていることを知っていることを
FracTemplateCtrl fracTemplateCtrl =
(FracTemplateCtrl)LoadControl("FracTemplateCtrl.ascx")
fracTemplateCtrl.TestMethod();
注意を言う必要が
Control fracTemplateCtrl =
(FracTemplateCtrl)LoadControl("FracTemplateCtrl.ascx")
fracTemplateCtrl.TestMethod();
を言いました。 Control
と宣言されている場合、ビジュアルスタジオはこの仮定をすることはできません。
@gnomixa:問題ありません。疑問を持ってコードを投稿した方が、はるかに迅速に回答を得ることができました。 ;] –
ユーザーコントロールを正しい種類にキャストしていますか?
サンプルコードがないと、確かに言うことは難しいですが、UserControlへの参照をカスタムコントロールの特定のタイプにキャストする必要があると思います。ユーザーコントロールのタイプは「PersonControl」である場合たとえば、その後、あなたのコードは次のようになります:あなたのクラスは、UserControlから継承され
PersonControl ctl = (PersonControl)LoadControl("PersonControl.ascx");
ctl.DoCustomMethod();
キャストしようとしましたが、どちらも動作しませんでした: コントロールfracTemplateCtrl =(FracTemplateCtrl)LoadControl( "FracTemplateCtrl.ascx"); Form.Controls.Add(fracTemplateCtrl); Response.Write(fracTemplateCtrl.TestMethod()); TestMethodが見つからないというエラーです – sarsnake
fracTemplateCtrlもキャストに加えてFracTemplateCtrl型である必要があります。このコメントのコードは、Controlタイプの変数に対してTestMethodを呼び出そうとしています。 –
場合は、他の人が持っているように、あなたがそれにアクセスしているときことを確認してください言った、あなたは正しくキャストしている。たとえば:
フォームで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();
}
マイクの答えはどのように行うのですが、Visual Studioは、ユーザーコントロールクラスを検出について少しグラグラすること、およびタイプがないと文句を言うことができます存在する。そのような状況では、web.configで参照される可能性があるにもかかわらず、ページに<% @Reference %>
タグを追加して強制的に認識させる必要があります。
@gnomixa:どうやって電話をしていますか?それはオブジェクトのタイプですか?動的に作成しているのであれば、それは私に反映されます。この場合、メソッドが既知のインターフェース(基本クラスまたはインターフェース)上にない限り、リフレクションを通してメソッドを呼び出す必要があります。 – casperOne