使用内部静态变量刷新多对象对象

时间:2017-03-28 07:47:33

标签: c# events multiple-instances updating

我应该看到它,但我不是...... 我有一个类来更改设备的模式,并包含一些图形自我实例化的按钮。为此,我需要实现该类,但可能会有多个该类的实例。

我创建了这个类并设置了一个静态变量MODE,这样我将实例化的所有对象中只有一个(ALL将引用这个静态变量来知道模式是什么)。 当模式改变时,我有一个提升并发送到''''''''实际选择的模式的值。 我不能将单例NOR作为静态类,因为我有一些设计对象作为我实例化对象的按钮。我需要能够使用我的类中的设计以两种形式再创建两个对象,但是当模式更改时(例如按钮名称更改为mode3),我需要同步刷新它们。

所以我的问题是:我需要在我的类中使用另一个事件来刷新实例化的所有对象。 因此,有两个活动会发送到我的主要''''''而且它不干净。 我怎么能只发送一次事件并同时刷新我的对象呢?

一些代码:

public partial class Form3 : Form
{
    changeMode newmodeclass;
    changeMode newmodeclass2;
    public Form3()
    {
        InitializeComponent();
        newmodeclass = new changeMode();
        newmodeclass2 = new changeMode();
        changeMode.e_ModeChanged += new EventHandler<changeMode.Mode_Args>(changeMode_e_ModeChanged);//static event to permit the change of all the objects created
    }
    private void changeMode_e_ModeChanged(object sender , changeMode.Mode_Args e)
    {
        label1.Text = e.refreshed.ToString(); 
    }
}

class changeMode
{
    public static event EventHandler<Mode_Args> e_ModeChanged;//EVENTS FOR OUTSIDE
    public class Mode_Args : EventArgs//events args (selected MODE)
    {//return arguments in events
        public Mode_Args(Int16 ivalue) { refreshed = ivalue; }//ctor
        public Int16 refreshed { get; set; }//accessors
    }

    private static event EventHandler RefreshMode;//EVENT FOR REFRESHING MY OBJECTS

    private static Int16 _ActualMode = 2;//MODE3=3, MODE2=2 or OTHERS=4 ACTUAL MODE AS STATIC
    public Int16 ActualMode//MODE ACCESSOR
    {
        get { return _ActualMode; }
        set
        {
            switch (value)
            {
                case 2:
                    _ActualMode = 2;
                    break;
                case 3:
                    _ActualMode = 3;
                    break;
                default:
                    _ActualMode = 4;
                    break;
            }
            if (e_ModeChanged != null) { e_ModeChanged(this, new Mode_Args(_ActualMode)); }//EVENT FOR OUTSIDE
        }
    }
    public changeMode()//ctor
    {
        RefreshMode += new EventHandler(FObj_MdiAuto_RefreshMode);
    }
    protected virtual void FObj_MdiAuto_RefreshMode(object sender, EventArgs e)//RECALL actualmode accessor (which do the work twice)
    {
        ActualMode = _ActualMode;
    }
    protected virtual void bt_ChooseMode_Click(object sender, EventArgs e)//on click change mode
    { 
        if (_ActualMode==3) ActualMode = 2;
        else ActualMode = 3;
        RefreshMode(this,EventArgs.Empty); //call event for refreshing all others object created   
    }
}

如果没有这个内部事件我怎么能刷新?

希望你理解我的问题,谢谢大家!!

0 个答案:

没有答案