C# 动态操作 控件位置绑定 [ Anchor ] 属性
阅读原文时间:2023年07月08日阅读:1

注:

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  
        }

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

///

/// 输出: 控件 Anchor 上下左右 01 表示标识,如:上左=1010 , None="-1",默认为:空; ///
///
///
/// 有多少个 sig
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

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

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章