C#中對虛擬屬性和抽象屬性的重寫,重寫label實例

從下面這個例子可以看出來區別
       public abstract class A
        {
            //抽象屬性不能有實現代碼
            public abstract string AbstractProperty { get; set; }

            string s;
            //虛擬屬性可以有實現代碼
            public virtual string VritualProperty
            {
                get { return this.s; }
                set { this.s = value.ToUpper(); }
            }
        }

        public class B : A
        {
            string message;
            //在繼承類(子類)中必須提供抽象屬性的實現
            public override string AbstractProperty
            {
                get { return message; }
                set { this.message = value; }
            }

            //重寫屬性可以調用基類中的實現
            public override string VritualProperty
            {
                get
                {
                    return base.VritualProperty;
                }
                set
                {
                    base.VritualProperty = value;
                }
            }
        }

 

//********************重寫label

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ETES.AutoControl_ES.Controls
{
   public class MyLabel:Label
    {

        public override string Text {
            
            get
            {
                return base.Text;
            }

            set
            {
                string str="";
                for(int i=0;i<value.Length;i++)
                {
                    str += value[i];
                    if (i % 10==0) str += "\r\n";
                }
                 base.Text = str;
            }
        }


    }
}
//***************************

  #region //控制按鈕標題
        public MyLabel lb = new MyLabel();
        public void InitialTitleManager()
        {
            //lb.Parent = this;
            lb.Visible = true;
            lb.AutoSize = true;
            lb.Font=new System.Drawing.Font("宋體", 9, System.Drawing.FontStyle.Bold);
            foreach (Control v in this.groupBox_CAutoScanSet.Controls)
            {
                if (v.Name.Contains("label"))
                {

                    v.MouseHover += TitleMouseHover;
                    v.MouseLeave += TitleMouseLeave;

                }

            }
            //  MessageBox.Show(" comboBox_AxisType.MouseHover+= TitleMouseHover;");
          
            comboBox_AxisType.MouseHover+= TitleMouseHover;
            comboBox_AxisType.MouseLeave += TitleMouseLeave;
        }
        public void TitleMouseHover(object sender, EventArgs e)
        {
            Control control = sender as Control;

            lb.Location = new System.Drawing.Point(control.Location.X + control.Width, control.Location.Y);

            string titile = "";
            //MessageBox.Show(control.Name);//2020.4.1註釋
            if (control.Name.Contains("label"))
            {
                //MessageBox.Show(control.Name);//2020.4.1註釋
                string tempStr = "";
                if(control.Text.Contains("AX2"))
                {
                    tempStr = control.Text.Substring(0, 3);
                }
                else
                {
                    tempStr = control.Text.Substring(0, 2);
                }
                if (StepModule.AxisDescription.ContainsKey(tempStr))
                {
                    titile = StepModule.AxisDescription[tempStr];
                }

            }
            else if(control.Name.Contains("comboBox"))
            {
                //MessageBox.Show(control.Name);//2020.4.1註釋
                titile = StepModule.AxisDescription[control.Text];


            }
            lb.Parent = control.Parent;
            lb.Visible = true;
            lb.BringToFront();
            lb.Location = new System.Drawing.Point(control.Location.X + control.Width, control.Location.Y);
            lb.Text = titile;
        }
           
        
    public void TitleMouseLeave(object sender, EventArgs e)
    {

        Control control = sender as Control;//此處control只是局部變量,函數結束後,control釋放,control引用的對象不會釋放

        lb.Location = new System.Drawing.Point(control.Location.X + control.Width, control.Location.Y);
        lb.Visible = false;
        lb.AutoSize = true;
        lb.Text = "";


    }

    #endregion

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章