张光荣的正能量 [机械软件...改革利剑...向着改变世界...]

博客园 首页 新随笔 联系 订阅 管理

注:

1.此类属于非常用类,只因本人需要编写的...顺便刷贴一下

2.对于初学,其中的枚举使用可以为你加深一点印象

 

以下为操作类代码:

    public class AchCtrer
            {
                #region

                /// <summary>
                /// 1010
                /// </summary>
                static string defTdlr = Ach.defSigs;
                int sigCnt, defSigCnt = 2;

                char chr;
                int len, cnt, idx;
                bool[] ctrTdlrS = new bool[] { true, false, true, false };
                Button tdlr;
                List<Button> tdlrL;
                Color defClrb, tdlrClrb = Color.Gray;
                bool bol;

                /// <summary>
                /// 输出:1010
                /// </summary>
                public string IOutAchSigs = "";
                /// <summary>
                /// AnchorStyles.Top | AnchorStyles.Left
                /// </summary>
                AnchorStyles achStls;

                #endregion

                #region 

                Control achCtr;
                public Control IGetAchCtr
                {
                    set
                    {
                        achCtr = value;
                        achStls = achCtr.Anchor;

                        if (achStls != Ach.TL)
                            Sigs(achStls, out IOutAchSigs, out sigCnt);
                        else
                        {
                            IOutAchSigs = defTdlr;
                            sigCnt = defSigCnt;
                        }

                        if (sigCnt > 0)
                            IniTdlrCtr();
                        else
                            achStls -= AnchorStyles.None;
                    }
                }
                private void IniTdlrCtr()
                {
                    cnt = IOutAchSigs.Length;
                    for (int i = 0; i < cnt; i++)
                    {
                        #region 

                        chr = IOutAchSigs[i];
                        tdlr = tdlrL[i];

                        if (chr == '0')
                        {
                            ctrTdlrS[i] = false;
                            tdlr.FlatStyle = FlatStyle.Standard;
                            tdlr.BackColor = defClrb;
                        }
                        else
                        {
                            ctrTdlrS[i] = true;
                            tdlr.FlatStyle = FlatStyle.Popup;
                            tdlr.BackColor = tdlrClrb;
                        }

                        #endregion
                    }
                }
                /// <summary>
                /// 
                /// </summary>
                /// <param name="tdlrS">Ancher 属性操作按钮 [共4个'方向键']</param>
                public AchCtrer22(Button[] tblrS)
                {
                    tdlrL = new List<Button>(tblrS);
                    Ini();
                }
                public AchCtrer22(Button b_top,Button b_bottom,Button b_left,Button b_right)
                {
                    tdlrL = new List<Button>();
                    tdlrL.Add(b_top);
                    tdlrL.Add(b_bottom);
                    tdlrL.Add(b_left);
                    tdlrL.Add(b_right);

                    Ini();
                }
                private void Ini()
                {
                    IniPar();
                    IniEvt();
                }
                private void IniPar()
                {
                    tdlr = new Button();
                    defClrb = tdlr.BackColor;
                }
                private void IniEvt()
                {
                    #region 

                    len = tdlrL.Count;
                    for (int i = 0; i < len; i++)
                    {
                        tdlr = tdlrL[i];
                        tdlr.BackColor = defClrb;
                        tdlr.FlatStyle = FlatStyle.Standard;

                        tdlr.Click += tdlr_Click;
                    }

                    #endregion
                }
                private void tdlr_Click(object s, EventArgs e)
                {
                    tdlr = s as Button;
                    idx = tdlrL.IndexOf(tdlr);

                    #region 

                    if (tdlr.FlatStyle == FlatStyle.Popup)
                    {
                        tdlr.FlatStyle = FlatStyle.Standard;
                        tdlr.BackColor = defClrb;
                        ctrTdlrS[idx] = false;

                        achStls -= Ach.stlS[idx];
                        sigCnt--;
                    }
                    else
                    {
                        tdlr.FlatStyle = FlatStyle.Popup;
                        tdlr.BackColor = tdlrClrb;
                        ctrTdlrS[idx] = true;

                        achStls |= Ach.stlS[idx];
                        sigCnt++;
                    }

                    #endregion

                    TdlrS();
                }
                private void TdlrS()
                {
                    #region 

                    if (sigCnt > 0)
                    {
                        IOutAchSigs = "";
                        for (int i = 0; i < cnt; i++)
                        {
                            bol = ctrTdlrS[i];
                            if (bol)
                                IOutAchSigs += '1';
                            else
                                IOutAchSigs += '0';
                        }

                        if (achStls == Ach.TL)
                            IOutAchSigs = "";
                    }
                    else
                    {
                        achStls = AnchorStyles.None;
                        IOutAchSigs = "-1";// defTdlr;
                    }

                    achCtr.Anchor = achStls;

                    #endregion
                }

                #endregion
            }

以下为操作类关联函数代码:

/// <summary>
/// 输出: 控件 Anchor 上下左右 01 表示标识,如:上左=1010 , None="-1",默认为:空;
/// </summary>
/// <param name="achStl"></param>
/// <param name="sigs"></param>
/// <param name="sigCnt">有多少个 sig </param>
public static void Sigs(AnchorStyles achStl, out string sigs, out int sigCnt)
{
    string achs = achStl + "";
    achs = achs.Replace(" ", "");

    sigCnt = 0;
    sigs = "-1";
    if (achs == N)
        return;

    string[] achS = achs.Split(c.d);
    List<string> achL = new List<string>(achS);

    int cnt = namL.Count, idx;
    string ach;
    sigs = "";
    for (int i = 0; i < cnt; i++)
    {
        ach = namL[i];
        idx = achL.IndexOf(ach);
        if (idx < 0)
            sigs += '0';
        else
        {
            sigs += '1';
            sigCnt++;
        }
    }
    return;
}

使用方法:

1.初始化:Achctrer ctrer=new Achctrer(四点个[方向顺序:上下左右]控件);

2.参数属性说明:

a.IGetAchChtr:此属性用于获取你要操作 Anchor 属性的控件

b.IOutAchSigs:此参数作为输出参数,其输出值为 Anchor 标识[此标识为本人自定义],例:-1=None,""=默认,1010=上左

 

交流 QQ : 2412366909@qq.com

手机号码:177-7499-4428

注:本人使用过程中暂未发现造成存取不正确的问题

          

posted on 2021-05-22 12:24  张光荣的正能量  阅读(462)  评论(0编辑  收藏  举报