ユーザーコントロールc#.net内のパブリックメソッド
-
03-07-2019 - |
質問
ページ内からユーザーコントロールのパブリックメソッドを呼び出す方法
ページのOnInit内にコントロールを動的にロードします。何らかの理由で、メソッドがパブリックであっても存在しないというビルドエラーが表示されます。ユーザーコントロールはすべての手間をかけるだけの価値はないと考えるようになりました。
解決
あなたは言った
Control fracTemplateCtrl =
(FracTemplateCtrl)LoadControl("FracTemplateCtrl.ascx")
fracTemplateCtrl.TestMethod();
発言する必要があります
FracTemplateCtrl fracTemplateCtrl =
(FracTemplateCtrl)LoadControl("FracTemplateCtrl.ascx")
fracTemplateCtrl.TestMethod();
fracTemplateCtrl is
はFracTemplateCtrl
として宣言されているため、Visual StudioはTestMethod()
があることを認識していることに注意してください。 Control
として宣言されている場合、Visual Studioはこの仮定を立てることができません。
他のヒント
ユーザーコントロールを正しい型にキャストしていますか?
サンプルコードがなければ確実に言うことはできませんが、UserControlへの参照をカスタムコントロールの特定のタイプにキャストする必要があると思います。たとえば、UserControlのタイプが<!> quot; PersonControl <!> quot;の場合、コードは次のようになります。
PersonControl ctl = (PersonControl)LoadControl("PersonControl.ascx");
ctl.DoCustomMethod();
クラスがUserControlを継承している場合、他の人が言ったように、クラスにアクセスするときは、正しくキャストしていることを確認してください。例えば:
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はUserControlクラスを検出することについて少し不安定で、型が存在しないことを訴えます。そのような状況では、web.configで参照されている場合でも、ページに<% @Reference %>
タグを追加して認識させる必要があります。