using System; using System.Collections.Generic; using System.Text; namespace Shared.Phone.UserCenter { /// <summary> /// Botton的最åˆåŽŸåž‹(ä¸å»ºè®®ä¿®æ”¹å’Œç›´æŽ¥ä½¿ç”¨):æ ‡å‡†å—体和颜色,文å—å‘å·¦é é½,14å·å— /// </summary> public class ButtonBase : Button { #region â– å˜é‡å£°æ˜Ž___________________________ /// <summary> /// 设置能å¦è§¦ç‚¹å‡»äº‹ä»¶ /// </summary> private bool m_CanClick = true; /// <summary> /// 设置能å¦è§¦ç‚¹å‡»äº‹ä»¶ /// </summary> public bool CanClick { get { return m_CanClick; } set { m_CanClick = value; //能够点击,åˆ™æ˜¾ç¤ºæ²¡æœ‰ç‚¹å‡»è¿‡çš„çŠ¶æ€ if (m_CanClick == true) { this.SetNotClickStatu(); } //ä¸èƒ½ç‚¹å‡»,则显示已ç»ç‚¹å‡»äº†çš„çŠ¶æ€ else { this.SetClickStatu(); } } } /// <summary> /// 圆角度 /// </summary> public int RadiusEx { set { this.Radius = (uint)Application.GetRealHeight(value); } } /// <summary> /// 声明æ¤å˜é‡,旨在å线程也能够去获å–一个控件的主键 /// </summary> public string MainKey = string.Empty; /// <summary> /// ç‚¹å‡»çš„åæ ‡ /// </summary> private System.Drawing.Point downPoint = new System.Drawing.Point(); /// <summary> /// 控件的点击事件(自定义å°è£…事件,æ¤äº‹ä»¶è¢«è®¤å¯ä¸ºæ‰§è¡ŒæŒ‰é’®æŒ‰ä¸‹äº‹ä»¶,å—CanClick属性控制) /// </summary> public Action<Button, MouseEventArgs> ButtonClickEvent = null; /// <summary> /// 控件的按下事件(自定义å°è£…事件,æ¤äº‹ä»¶è¢«è®¤å¯ä¸ºæ‰§è¡ŒæŒ‰é’®æŒ‰ä¸‹äº‹ä»¶,å—CanClick属性控制) /// </summary> public Action<Button, MouseEventArgs> ButtonDownClickEvent = null; /// <summary> /// 控件触å‘移动的事件(自身拥有算法,当移动多少åƒç´ åŽ,触å‘事件,注æ„,该事件å¯èƒ½ä¼šé¢‘ç¹çš„触å‘) /// </summary> public Action ButtonHappenMoveEvent = null; #endregion #region â– é‡å†™å½ªå“¥çš„属性_____________________ /// <summary> /// é‡å†™Text属性 /// </summary> public new string Text { //å…ˆè¿™ä¹ˆå¼„å…ˆå§ get { return base.Text == null ? string.Empty : base.Text; } set { base.Text = value == null ? string.Empty : value; } } #endregion #region â– åˆå§‹åŒ–_____________________________ /// <summary> /// Botton的最åˆåŽŸåž‹(ä¸å»ºè®®ä¿®æ”¹å’Œç›´æŽ¥ä½¿ç”¨):æ ‡å‡†å—体和颜色,文å—å‘å·¦é é½,14å·å— /// </summary> public ButtonBase() { //测试,全体按钮为14å·å— this.TextSize = 14; this.TextColor = UserCenterColor.Current.TextColor1; this.TextAlignment = TextAlignment.CenterLeft; //点击事件 this.MouseUpEventHandler += ButtonBase_MouseUpEventHandler; //按下事件 this.MouseDownEventHandler += ButtonBase_MouseDownEventHandler; //移动事件 this.MouseMoveEventHandler += ButtonBase_MouseMoveEventHandler; } /// <summary> /// åˆå§‹åŒ–控件大å°(ä¸ä»¥å¹³å‡å€¼è¿›è¡ŒçœŸå®žæ•°å€¼è®¡ç®—) /// </summary> /// <param name="i_Width">宽度</param> /// <param name="i_Height">高度</param> /// <param name="real">是å¦è®¡ç®—真实值</param> public void InitSize(int i_Width, int i_Height, bool real = true) { if (real == true) { i_Width = Application.GetRealWidth(i_Width); i_Height = Application.GetRealHeight(i_Height); } this.Height = i_Height; this.Width = i_Width; } /// <summary> /// åˆå§‹åŒ–控件大å°(ä¸ä»¥å¹³å‡å€¼è¿›è¡ŒçœŸå®žæ•°å€¼è®¡ç®—) /// </summary> /// <param name="i_Width">宽度</param> /// <param name="real">是å¦è®¡ç®—真实值</param> public void InitSize(int i_Width, bool real = false) { if (real == true) { i_Width = Application.GetRealWidth(i_Width); } this.Height = ControlCommonResourse.NormalControlHeight; this.Width = i_Width; } /// <summary> /// åˆå§‹åŒ–å›¾æ ‡æŽ§ä»¶å¤§å°(以平å‡å€¼è¿›è¡ŒçœŸå®žæ•°å€¼è®¡ç®—) /// </summary> /// <param name="i_Width">宽度</param> /// <param name="i_Height">高度</param> /// <param name="real">是å¦è®¡ç®—真实值</param> public void InitIconSize(int i_Width, int i_Height, bool real = true) { if (real == true) { i_Width = this.GetPictrueRealSize(i_Width); i_Height = this.GetPictrueRealSize(i_Height); } this.Height = i_Height; this.Width = i_Width; } /// <summary> /// åˆå§‹åŒ–å›¾ç‰‡æŽ§ä»¶å¤§å° /// </summary> /// <param name="i_Width">宽度</param> /// <param name="i_Height">高度</param> /// <param name="real">是å¦è®¡ç®—真实值</param> public void InitPictrueSize(int i_Width, int i_Height, bool real = true) { if (real == true) { i_Width = HdlControlLogic.Current.GetPictrueRealSize(i_Width); i_Height = HdlControlLogic.Current.GetPictrueRealSize(i_Height); } this.Height = i_Height; this.Width = i_Width; } #endregion #region ■点击事件___________________________ /// <summary> /// 点击事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ButtonBase_MouseUpEventHandler(object sender, MouseEventArgs e) { if (ButtonClickEvent == null) { this.MouseUpEventHandler -= ButtonBase_MouseUpEventHandler; return; } //2020.05.14è¿½åŠ IsFormAdding:界é¢è¿˜åœ¨åŠ è½½ä¸,ä¸èƒ½å†ç‚¹å‡» if (CanClick == true && ControlCommonResourse.IsFormAdding == false) { //Log出力 this.WriteLog(0); try { this.ButtonClickEvent(this, e); } catch (Exception ex) { //出现未知错误 var alert = new ShowMsgControl(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.uUnKnownError)); alert.Show(); //Log出力 HdlLogLogic.Current.WriteLog(ex); } } } #endregion #region ■按下事件___________________________ /// <summary> /// 按下事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ButtonBase_MouseDownEventHandler(object sender, MouseEventArgs e) { //记录起当å‰ç‚¹å‡»çš„åæ ‡ downPoint.X = (int)e.X; downPoint.Y = (int)e.Y; if (CanClick == false || this.ButtonDownClickEvent == null) { //ä¸èƒ½ç‚¹å‡» return; } try { this.ButtonDownClickEvent(this, e); } catch (Exception ex) { //出现未知错误 var alert = new ShowMsgControl(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.uUnKnownError)); alert.Show(); //Log出力 HdlLogLogic.Current.WriteLog(ex); } } #endregion #region ■移动事件___________________________ /// <summary> /// 移动事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ButtonBase_MouseMoveEventHandler(object sender, MouseEventArgs e) { if (this.ButtonHappenMoveEvent == null) { this.MouseMoveEventHandler -= ButtonBase_MouseMoveEventHandler; return; } int value = (int)e.X - this.downPoint.X; if (value >= 30 || value <= -30) { //触å‘移动事件 this.ButtonHappenMoveEvent(); return; } value = (int)e.Y - this.downPoint.Y; if (value >= 30 || value <= -30) { //触å‘移动事件 this.ButtonHappenMoveEvent(); return; } } #endregion #region ■设置点击状æ€_______________________ /// <summary> /// 设置点击åŽçš„状æ€(æ¤æ–¹æ³•ç”±å„自控件进行é‡è½½) /// </summary> public virtual void SetClickStatu() { } /// <summary> /// 设置éžç‚¹å‡»åŽçš„状æ€(æ¤æ–¹æ³•ç”±å„自控件进行é‡è½½) /// </summary> public virtual void SetNotClickStatu() { } #endregion #region ■一般方法___________________________ /// <summary> /// æŽ§ä»¶æ‘§æ¯ /// </summary> public override void RemoveFromParent() { ButtonClickEvent = null; ButtonDownClickEvent = null; if (this.Parent != null) { base.RemoveFromParent(); } } /// <summary> /// Yè½´é‡ç½®(真实数值,æ²¡æœ‰çˆ¶å®¹å™¨æ— æ•ˆ) /// </summary> /// <param name="alignment">ä¸Šä¸‹å¯¹é½æ–¹å¼</param> /// <param name="Space">上下两部分的间è·</param> public void ReSetYaxis(UViewAlignment alignment, int Space = 0) { if (this.Parent == null) { return; } //Yè½´é‡ç½® this.Y = HdlControlLogic.Current.GetControlChidrenYaxis(this.Parent.Height, this.Height, alignment, Space); } /// <summary> /// æ ¹æ®æ–‡æœ¬,计算它实际的宽度 /// </summary> /// <returns></returns> public int GetRealWidthByText() { if (string.IsNullOrEmpty(this.Text) == true) { return Application.GetRealWidth(25); } #if Android //需è¦å¢žåŠ ä¸€ä¸ªè¯¯å·®å€¼ return this.GetTextWidth() + Application.GetRealWidth(12); #endif #if iOS //需è¦å¢žåŠ ä¸€ä¸ªè¯¯å·®å€¼ return this.GetTextWidth() + Application.GetRealWidth(25); #endif } /// <summary> /// 计算图片的真实高宽度 /// </summary> /// <param name="i_size"></param> /// <returns></returns> public int GetPictrueRealSize(int i_size) { return HdlControlLogic.Current.GetPictrueRealSize(i_size); } #endregion #region â– Log出力____________________________ /// <summary> /// 该控件所属的界é¢åå— /// </summary> public string formName = null; /// <summary> /// 控件åå— /// </summary> private string controlName = null; /// <summary> /// Log出力 /// </summary> private void WriteLog(int div) { if (formName == null) { formName = string.Empty; View myView = this.Parent; for (; ; ) { if (myView == null) { break; } else if (myView is CommonFormBase) { //è¿™ä¸ªæŽ§ä»¶æ‰€å±žçš„ç•Œé¢ formName = ((CommonFormBase)myView).FormID; break; } myView = myView.Parent; } if (string.IsNullOrEmpty(this.Text) == false) { //这个控件的文本 controlName = this.Text; } else { //如果没有文本的è¯,å®ƒåº”è¯¥æ˜¯ä¸€å¼ å›¾ç‰‡ controlName = this.UnSelectedImagePath; } } if (div == 0) { HdlLogLogic.Current.WriteLog(1, formName + "çš„[" + controlName + "]按键被点击"); } else { HdlLogLogic.Current.WriteLog(1, formName + "çš„[" + controlName + "]按键被长按"); } } #endregion } }