我做了一个类似vs里控件的界面,是设计时不是运行时,可以往Form窗体拖拽控件,现在想限制控件的移动和大小改变,类似于控件的锁定,在我程序里的设计时应该怎样把一个控件锁定?我发现控件里有一个WindowTarget,和SelectionRules,但他俩都是私有的根本访问不了,SelectionRules里有Locked的一个属性。我就想知道怎样在自己做设计时对控件实现锁定操作
解决方案 »
- 新手求助
- 关于传真机发送WORD文件问题 我是新手分少,大家帮帮忙,我虚心学习
- C#改变窗体设置问题问题
- C#中如何反序列化使用替代组的XML?
- 关于开发word插件打包做安装文件的问题
- 请问:我要计算学生的成绩,有的是80,有的是80.5分,均分要83.24,小数位不定,怎么办啊?
- C# WINFROM 求助
- 关于AspNetMenu.dll添加到工具箱,出错提示为他没有被识别为COM服务器????
- c# 如何RSA加密, 和javascript 相互验证
- C#中使用mybatis连接oracle数据库,在客户端可不可以不安装oracle数据库或oracle客户端
- 关于批量查询的问题
- SelectionRules的问题
private bool is_lock;
public bool Is_lock
{
get{return is_lock;}
set
{
is_lock=value;
if(value)this.locked;
}}
长宽,位置都可以这么设定
private int width1;
public int Width1
{
get{return width1;}
set
{
width1=value;
if(value)this.Width=value;
}}
public int Width1
{
get{return width1;}
set
{
width1=value;
this.Width=value;
}}
if去了
控件.Locked这个
private void UserControl1_Load(object sender, EventArgs e)
{
Size1 = this.Size1;
}
private void UserControl1_Resize(object sender, EventArgs e)
{
this.Size = Size1;
}
看看这么写行不,写个_Resize的事件,当大小改变时,返回大小,这样就不变了
{
Size1 = this.Size;
}
这个地方改下
keytype可以是用来标识哪一个控件的关键字,比如名称,句柄之类的。当你的设计器需要Lock一个控件的时候就把这个控件的标识记录到lockList中,解除Lock的时候则从lockList中移除。当你使用鼠标等来移动控件的时候可以先检索这个列表,如果被操作的控件已被lockList包含了则不执行操作,如果未包含则正常执行。
当你关闭设计器的时候把这个列表的内容存放到你的配置文件里以便下次打开的时候再使用。
class testTT : Component, IExtenderProvider
{
private Dictionary<Control, string> m_valueList;
public testTT()
{
m_valueList = new Dictionary<Control, string>();
}
public bool CanExtend(object target)
{
return ((target is Control) && !(target is testTT));
} [DefaultValue(""), Localizable(true), Editor("System.ComponentModel.Design.MultilineStringEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
public string GetTT(Control control)
{
if (control == null)
{
return string.Empty;
}
if (this.m_valueList.ContainsKey(control))
{
return this.m_valueList[control];
}
return "";
}
public void SetTT(Control control, string caption)
{
this.m_valueList.Add(control, caption);
}
}
当你把这个testTT拖放到窗体上后,在窗体的最下边的显示组件的栏里就会显示出一个新的组件,然后窗体上的所有的控件都会多出一个"testTT1上的TT"这个属性供你属性字符串了。
参考 : http://msdn.microsoft.com/zh-cn/library/system.componentmodel.typedescriptor.getproperties(VS.80).aspx