注:

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

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

C# 动态操作 控件位置绑定 [ Anchor ] 属性的更多相关文章

  1. android 动态改变控件位置和大小 .

    动态改变控件位置的方法: setPadding()的方法更改布局位置. 如我要把Imageview下移200px:             ImageView.setPadding( ImageVie ...

  2. (WPF) MVVM: 动态添加控件及绑定。

    比如需要显示一个键盘,里面有各个按键.实现的效果如下: 之前的思路,就是建立一个singleKey的控件,然后在后台用代码动态的添加到父控件里去, 再用代码在后台进行绑定. 这种实现方法并不是真正的M ...

  3. VC++ 两种动态调整控件位置的方法(CButton设置为Radio形式会出现错误)

    ((CButton*)GetDlgItem(IDC_CHECK1))->MoveWindow(, cy - , , ); ((CButton*)GetDlgItem(IDC_CHECK2))-& ...

  4. WPF中PasswordBox控件无法绑定Password属性解决办法

    在WPF中,默认的Password控件的Password属性是不允许为之绑定的,下面是一个解决绑定Password的方法的代码: 1.前台代码 <Window x:Class="Pas ...

  5. 实现对DataGird控件的绑定操作

    //实现对DataGird控件的绑定操作 function InitGrid(queryData) { $('#grid').datagrid({ //定位到Table标签,Table标签的ID是gr ...

  6. uGUI动态加载控件位置错误

    最近在使用uGUI时遇到了一个问题,在此记录一下.在Canvas的Render Mode设置为Screen Space-Overlay模式时,动态加载控件是不会发生问题的.但是在Screen Spac ...

  7. uGUI动态加载控件位置错误(转自:https://www.cnblogs.com/mezero/p/4542939.html)

    最近在使用uGUI时遇到了一个问题,在此记录一下.在Canvas的Render Mode设置为Screen Space-Overlay模式时,动态加载控件是不会发生问题的.但是在Screen Spac ...

  8. 在Bootstrap开发框架中使用dataTable直接录入表格行数据(2)--- 控件数据源绑定

    在前面随笔<在Bootstrap开发框架中使用dataTable直接录入表格行数据>中介绍了在Web页面中使用Jquery DataTable插件进行对数据直接录入操作,这种处理能够给用户 ...

  9. winform导入导出excel,后台动态添加控件

    思路: 导入: 1,初始化一个OpenFileDialog类 (OpenFileDialog fileDialog = new OpenFileDialog();) 2, 获取用户选择文件的后缀名(s ...

  10. Jquery 动态追加控件并获取值

    先展示通过动态添加控件的结果: 实现步骤: 1.引用js文件 <script src="Script/jquery-1.5.1.min.js" type="text ...

随机推荐

  1. .NetCore【中间件】API文档Swagger

    Swagger 为API接口生成文档 Core中添加Swagger nuget安装包 install-package Swashbuckle.AspNetCore 注册服务 public void C ...

  2. 吴恩达老师机器学习课程chapter03——过拟合与正则化

    吴恩达老师机器学习课程chapter03--过拟合与正则化 本文是非计算机专业新手的自学笔记,欢迎指正与其他任何合理交流. 本文仅作速查备忘之用,对应吴恩达(AndrewNg)老师的机器学期课程第七章 ...

  3. IDEA通过Spring Initalizr新建SSM (2)

    之前的方式是通过官网初始化demo(URL:https://start.spring.io/)现在记录一下通过IDEA自带的初始化器新建SSM框架 1.打开IDEA,点击新建,出现如下图菜单,点击Sp ...

  4. fatal error: openssl/ssl.h: No such file or director

    $ sudo apt-get install libssl-dev

  5. 08 安装虚拟机:Windows 10

    08 安装虚拟机:Windows 10 在安装虚拟机之前,总是要有安装来源媒体(例如:ISO映像之类),方可顺利进行.在Proxmox VE中有几种将ISO档置入Proxmox VE的方式,本节介绍其 ...

  6. pushd 和 popd

    可以把你当前的文件路径 放进一个栈里,后边拿出来 很方面的skim方法

  7. sed编辑器

    sed sed是一个非交互式的流文本编辑器,可实现增删改查,广泛适用于shell脚本中 工作原理 sed每次只从文本或标准输入中读取一行数据,将其拷贝到一个编辑缓冲区,然后对其如同命令一般处理,并显示 ...

  8. sudo: port: command not found 报错解决方案

    mac本安装graphviz的方法是: sudo port install graphviz 执行报错: sudo: port: command not found 其实是未设置环境变量,执行下面的语 ...

  9. mybatis-generator 生成实体类,表字段类型有text,longtext,生成**WithBLOBs解决办法

     modeType="flat"  其他参数请查询文档http://www.youbiji.cn/doc/mybatis/xml-table.html

  10. 法拉第未来任命新CFO!贾跃亭激动发声

    近段时间以来,贾跃亭旗下的的法拉第未来(Faraday Future,简称 FF)可谓是动作频频. 一天前,有媒体报道称,FF 任命 Zvi Glasman 为其首席财务官.其将负责公司财务.投资者关 ...