C# 动态操作 控件位置绑定 [ Anchor ] 属性
注:
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 ] 属性的更多相关文章
- android 动态改变控件位置和大小 .
动态改变控件位置的方法: setPadding()的方法更改布局位置. 如我要把Imageview下移200px: ImageView.setPadding( ImageVie ...
- (WPF) MVVM: 动态添加控件及绑定。
比如需要显示一个键盘,里面有各个按键.实现的效果如下: 之前的思路,就是建立一个singleKey的控件,然后在后台用代码动态的添加到父控件里去, 再用代码在后台进行绑定. 这种实现方法并不是真正的M ...
- VC++ 两种动态调整控件位置的方法(CButton设置为Radio形式会出现错误)
((CButton*)GetDlgItem(IDC_CHECK1))->MoveWindow(, cy - , , ); ((CButton*)GetDlgItem(IDC_CHECK2))-& ...
- WPF中PasswordBox控件无法绑定Password属性解决办法
在WPF中,默认的Password控件的Password属性是不允许为之绑定的,下面是一个解决绑定Password的方法的代码: 1.前台代码 <Window x:Class="Pas ...
- 实现对DataGird控件的绑定操作
//实现对DataGird控件的绑定操作 function InitGrid(queryData) { $('#grid').datagrid({ //定位到Table标签,Table标签的ID是gr ...
- uGUI动态加载控件位置错误
最近在使用uGUI时遇到了一个问题,在此记录一下.在Canvas的Render Mode设置为Screen Space-Overlay模式时,动态加载控件是不会发生问题的.但是在Screen Spac ...
- uGUI动态加载控件位置错误(转自:https://www.cnblogs.com/mezero/p/4542939.html)
最近在使用uGUI时遇到了一个问题,在此记录一下.在Canvas的Render Mode设置为Screen Space-Overlay模式时,动态加载控件是不会发生问题的.但是在Screen Spac ...
- 在Bootstrap开发框架中使用dataTable直接录入表格行数据(2)--- 控件数据源绑定
在前面随笔<在Bootstrap开发框架中使用dataTable直接录入表格行数据>中介绍了在Web页面中使用Jquery DataTable插件进行对数据直接录入操作,这种处理能够给用户 ...
- winform导入导出excel,后台动态添加控件
思路: 导入: 1,初始化一个OpenFileDialog类 (OpenFileDialog fileDialog = new OpenFileDialog();) 2, 获取用户选择文件的后缀名(s ...
- Jquery 动态追加控件并获取值
先展示通过动态添加控件的结果: 实现步骤: 1.引用js文件 <script src="Script/jquery-1.5.1.min.js" type="text ...
随机推荐
- 超2T硬盘使用gpt分区及做成lvm
1.超过2T分区不能用fdisk了,用parted 分区格式化后对新的分区做lvm
- 阿里云经典网络Debian 11 启动非常慢
有一台阿里云经典网络的实例.系统太老了,重装了Debian 11,但是启动非常慢,要5分钟才能开机,简直离谱. root@AliYun:~# systemd-analyze blame 5min 3. ...
- What is REST and Restful?
什么是rest 和 restful? 提出rest的作者,目的:符合框架原理的情况下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强,性能好,适宜通讯的架构. Fielding将他对互联网 ...
- java 守护线程的关闭
在进程内所有用户线程 全部消亡后,如果 守护线程仍在执行 ( 注意: 守护线程并不是一直运行中,守护线程中的代码执行完毕,则守护线程自然消亡. ),则会被强制消亡.
- python--线性回归
首先先安装要用到的包:sklearn,顾名思义机器学习包 import matplotlib.pyplot as plt import numpy as np import pandas as pd ...
- 移动端性能测试--CPU资源
一.背景 在很多场景下我们去使用 App,可能会碰到手机会出现发热发烫的现象.这是因为 CPU 使用率过高.CPU 过于繁忙,会使得整个系统无法响应用户,整体性能降低,用户体验变得相当差,也容易引起 ...
- 学生网络创业交流会-2021年office
1.课程的讲解之前,先来对题目进行分析,首先需要在考生文件夹下,将Wrod素材.docx文件另存为Word.docx,后续操作均基于此文件,否则不得分. 2.这一步非常的简单,打开下载素材文件,在[文 ...
- android 集成友盟实现 第三方分享 登录(qq,新浪,微信)
其实友盟的文档写的非常详细了,在这只是记录一下开发过程中遇到过的坑. 开发流程,先到友盟的官网注册账号创建应用,友盟的文档地址:http://dev.umeng.com/social/android/ ...
- 03 Spark RDD编程基础
1. 准备文本文件从文件创建RDD lines=sc.textFile()筛选出含某个单词的行 lines.filter() 2. 生成单词的列表从列表创建RDD words=sc.paralleli ...
- antd DatePicker限制日期的选择
import React from 'react'; import ReactDOM from 'react-dom'; import {Input,DatePicker,Form,Col,Butto ...