كيفية الوصول إلى فئة EventArgs المخصصة في حدث النقر على الزر؟

StackOverflow https://stackoverflow.com/questions/5405929

  •  29-10-2019
  •  | 
  •  

سؤال

وذلك متابعة لما يلي:الوصول إلى القيم ضمن فئة eventsargs المخصصة

كيف يمكنني الوصول إلى المتغيرات العامة ضمن فئة Eventargs المخصصة، باستخدام النقر على الزر أو أي طريقة أخرى؟

مثال لفئة وسيطات الأحداث المخصصة:

public class TraderEventArgs: EventArgs
{
    private int _shares;
    private string _symbol;

    public TraderEventArgs(int shs, string sym)
    {
        this._shares = shs;
        this._symbol = sym;
    } 

    public decimal Price 
    {
        get {return _prices;}       
    }

   public int Shares
   {
       get { return _shares; }
   }
}

الكود خلف حدث Button_click:

public partial class _Default : System.Web.UI.Page
{
    protected void Button1_Click(object sender, EventArgs e)
    {
        // run trader app
        myApp.Main();

        // try to access TraderEventArgs class
        TraderEventArgs: EventArgs ev = TraderEventArgs: EventArgs();   // Invalid

        TraderEventArgs ev = new TraderEventArgs();   // this needs argument variables that are unassigned... ?

        TraderEventArgs ev = (TraderEventArgs)e;  //  Unable to cast object of type 'System.EventArgs' to type TraderEventArgs'.

        string sym = ev.Symbol.ToString();
        string sharws = ev.Shares.ToString();

        // do something with data

     }

شكرا للمساعدة.

هل كانت مفيدة؟

المحلول

عندما يتم رفع حدث النقر على الزر، فإنه يتم إنشاء ملف EventArgs الذي يتم تمريره إلى "e".لم يتم إنشاء هذا الكائن بواسطتك، بل بواسطة الإطار نفسه، وهو من النوع EventArgs.هذا يمنعك من القدرة على إرساله إلى نوع مختلف.

إذا أردت أن يكون لك حدث يرفع TraderEventArgs, ، تحتاج إلى إنشاء حدث، ويفضل أن يكون من النوع EventHandler<TraderEventArgs>, ، وارفع هذا الحدث إلى مكان تحت سيطرتك.يتيح لك هذا إنشاء فئة من النوع الصحيح، ثم التعامل معها (في معالج حدث منفصل) مباشرةً.

نصائح أخرى

لا يمكنك أن تفعل ذلك.ال EventArgs التابع Click الحدث دائمًا من النوع EventArgs;لا يمكنك أن تتوقع أن يكون من النوع TraderEventArgs, ، لأن وسائط الحدث يتم إنشاؤها بواسطة الزر، ولا يعرف الزر شيئًا عنها TraderEventArgs.الطريقة الوحيدة التي يمكن أن تنجح بها هي أن تقوم بإنشاء واحدة خاصة بك Button التحكم الذي يرفع الحدث ب TraderEventArgs بدلا من EventArgs

الحل: قم بتمرير أحداث مخصصة من خلال المفوض المخصص والحدث الذي يعرض البيانات (جدول البيانات ، الصفيف ، إلخ) ... باستخدام أي نقرة على الزر أو أي حدث آخر ضروري.

لذا ، كدالة للمندوب ، يتم إرجاع البيانات الصحيحة .. لا يمكنني نشر الكود الكامل هنا ، ولكنه تعديل لهذا المثال الممتاز جدًا على استخدام مندوب الحدث ...

Core C # و .NET 3.7المندوبين والأحداث http://flylib.com/books/ar/4.253.1.38/1/

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top