الأساليب العامة داخل التحكم في المستخدم 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 الخاص بك من النوع "PersonControl" ، فإن الكود الخاص بك سيبدو مثل هذا:
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 ، ويشتكي من أن النوع غير موجود. في تلك المواقف ، يجب أن أضيف أ <% @Reference %>
ضع علامة على الصفحة لإجبارها على التعرف عليها ، على الرغم من أنه قد يتم الرجوع إليها في web.config.