2.19  Przykład 2 – Praca ze zmiennymi

 

Poniższy kod prezentuje definicję obiektu dla AsixEvo, w którym wykorzystano opcję bezpośredniego dostępu do zmiennych, ich stanu, wartości i atrybutów. Obiekt składa się z trzech przycisków. Tekst pierwszego przycisku prezentuje wartości bieżące zmiennej systemowej „Counter”. Tekst drugiego przycisku pokazuje wartości bieżące zmiennej, której nazwa została podana jako wartość właściwości „Inna zmienna” obiektu. Dodatkowo, wartość ta jest poprzedzona tekstem pobranym z atrybutu „Opis” tej zmiennej. Tekst trzeciego przycisku pokazuje wartości bieżące zmiennej głównej obiektu.

 

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Drawing;

using Askom.AddonManager;

 

namespace TestowaKontrolkaEvo

{

   /// <summary>

   /// Przykładowa klasa kontrolki obiektu dla Asix Evo korzystająca bezpośrednio ze zmiennych.

   /// </summary> 

   public class VarRefreshTest : Askom.AddonManager.EvoObjectBase 

   {

      private System.Windows.Forms.Button button1;

      private System.Windows.Forms.Button button2;

      private System.Windows.Forms.Button button3;

 

      public VarRefreshTest()

      {

         // Inicjalizacja...          

 

         SuspendLayout();

 

         // Przycisk 1

         button1 = new System.Windows.Forms.Button();

         button1.Dock = System.Windows.Forms.DockStyle.Top;

         button1.Name = "button1";

         button1.Text = "";

         Controls.Add(button1);

 

         // Przycisk 2 

         button2 = new System.Windows.Forms.Button();

         button2.Dock = System.Windows.Forms.DockStyle.Fill;

         button2.Name = "button2";

         button2.Text = "";         

         Controls.Add(button2);

 

         // Przycisk 3 

         button3 = new System.Windows.Forms.Button();

         button3.Dock = System.Windows.Forms.DockStyle.Bottom;

         button3.Name = "button3";

         button3.Text = "";

         Controls.Add(button3);

 

         Name = "Odswiezanie";

 

         ResumeLayout(false);        

 

         VariableStateChangedEvent += VarRefreshTest_VariableStateChangedEvent;

      }      

 

      public override string EvoObjectID

      {

         get 

         {

            return "Odswiezanie";  // Unikalny identyfikator obiektu

         }

      }

 

      public override string EvoObjectDescription

      {

         get 

         {

            return "Nasluchiwanie zmiennych";  // Krótki opis obiektu 

         }

      }

 

      string mDefaultVarName = "Counter";  // Counter jest zmienną systemową więc zawsze istnieje.

      public override void Reset()

      {

         VariableState vs = GetVariableState(mDefaultVarName);

         if (vs != null)

         {           

            RegisterVariable(mDefaultVarName); // Rejestrujemy zmienną wbudowaną 

            button1.Text = vs.FormattedValue;  // Ustawiamy wartość aktualną

         }

 

         base.Reset();

      }

 

      public override void Disconnect()

      {

         UnregisterVariable(mDefaultVarName); // Wyrejestrowujemy zmienną wbudowaną 

         base.Disconnect();

      }

 

      string mMainVarName = null;      

      /// <summary>

      /// Dostęp do właściwosci standardowej "Zmienna główna" - wartość wyświetlana w polu edycyjnym

      /// </summary> 

      [Askom.AddonManager.EvoObjectStandardProperty(Askom.AddonManager.EvoObjectStandardPropertyName.MainVar)]

      public string MainVariable

      {

         set 

         {

            UnregisterVariable(mMainVarName);  // Wyrejestrowujemy poprzednia zmienną 

            mMainVarName = value;

 

            VariableState vs = GetVariableState(mMainVarName);

            if (vs != null)

            {  

               RegisterVariable(mMainVarName);   // Rejestrujemy nową zmienną 

               button3.Text = vs.FormattedValue; // Ustawiamy wartość aktualną 

            }

         }         

      }

 

      string mSecondVarName = null;

      string mSecondVarDescription = string.Empty;

      //// <summary>

      /// Właściwość napisu na drugim przycisku.

      /// </summary> 

      [Askom.AddonManager.EvoObjectProperty(Description = "Inna zmienna", EditorType = EditorType.Variable)]

      public string Var2

      {

         set 

         {

            UnregisterVariable(mSecondVarName);  // Wyrejestrowujemy poprzednia zmienną 

            mSecondVarName = value;

 

            VariableState vs = GetVariableState(mSecondVarName);

            if (vs != null)

            {

               object tob = GetVariableAttribute(mSecondVarName, "Description");

               if (tob != null)

                  mSecondVarDescription = tob.ToString();

 

               RegisterVariable(mSecondVarName); // Rejestrujemy nową zmienną 

               button2.Text = mSecondVarDescription + " : " + vs.FormattedValue; // Ustawiamy wartość aktualną 

            }

         }

 

         get 

         {

            return "DateTime"// Wartość domyślna 

         }

      }

 

      void VarRefreshTest_VariableStateChangedEvent(string aVariableName, VariableState aVariableState)

      {

         if (string.Equals(aVariableName, mDefaultVarName, StringComparison.OrdinalIgnoreCase))

            button1.Text = aVariableState.FormattedValue;         

 

         if (string.Equals(aVariableName, mSecondVarName, StringComparison.OrdinalIgnoreCase))

            button2.Text = mSecondVarDescription + " : " + aVariableState.FormattedValue;

 

         if (string.Equals(aVariableName, mMainVarName, StringComparison.OrdinalIgnoreCase))

            button3.Text = aVariableState.FormattedValue;

      }

   }

}