注:
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
注:本人使用过程中暂未发现造成存取不正确的问题