C#中如何锁住设计器中的用户控件 设计器

欢迎加入我们,一同切磋技术 &
用户名: &&&
密 码: &
共有 14419 人关注过本帖
标题:C#如何动态创建控件?在winform中怎么使用代码来创建控件并添加控件事件啊? ...
等 级:论坛游民
帖 子:50
专家分:31
结帖率:100%
&&已结贴√
&&问题点数:10&&回复次数:4&&&
C#如何动态创建控件?在winform中怎么使用代码来创建控件并添加控件事件啊?
另外这段代码有没有更好的写法?我想让控件在窗口中排成一个3*3的格式 程序代码:private void 布局()
&&&&&&&&&&&&Button[] bu = { button1, button2, button3, button4,button5,button6,button7,button8,button9};
&&&&&&&&&&&&foreach (Button but in bu)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& but.Top = <font color=#;
&&&&&&&&&&&&&&& but.Left = <font color=#;
&&&&&&&&&&&&&&& but.Height = <font color=#;
&&&&&&&&&&&&&&& but.Width = <font color=#;
&&&&&&&&&&&&&&& but.Cursor = Cursors.H
&&&&&&&&&&&&}
&&&&&&&&&&&&for (int i = <font color=#; i & <font color=#;i++ )
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& bu[i].Left = i&=<font color=#?<font color=#:bu[i-<font color=#].Left+bu[i].W
&&&&&&&&&&&&}
&&&&&&&&&&&&for (int i = <font color=#; i & <font color=#;i++ )
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& bu[i].Top = bu[i].H
&&&&&&&&&&&&&&& bu[i].Left = i &= <font color=# ? <font color=# : bu[i - <font color=#].Left+bu[i].W
&&&&&&&&&&&&}
&&&&&&&&&&&&for (int i = <font color=#; i & <font color=#;i++ )
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& bu[i].Top = bu[i].Height * <font color=#;
&&&&&&&&&&&&&&& bu[i].Left = i &= <font color=# ? <font color=# : bu[i - <font color=#].Left+bu[i].W
&&&&&&&&&&&&}
如果我要使用代码来创建的话要怎么写啊?
搜索更多相关主题的帖子:
等 级:论坛游民
帖 子:13
专家分:50
我把自己写的代码贴给你,不知道会不会对你有帮助
&&&&&&&&private void button1_Click(object sender, EventArgs e)
&&&&&&&&&&&&RemoveControl();
&&&&&&&&&&&&int P_int_x=10;
&&&&&&&&&&&&int P_int_y=10;
&&&&&&&&&&&&for (int i = 0; i & 100; i++)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& Button btn = new Button();
&&&&&&&&&&&&&&& btn.Text = (i + 1).ToString();
&&&&&&&&&&&&&&& btn.Name = &btn& + (i + 1).ToString();
&&&&&&&&&&&&&&& btn.Width = 40;
&&&&&&&&&&&&&&& btn.Height = 20;
&&&&&&&&&&&&&&& btn.Location = new Point(P_int_x, P_int_y);
&&&&&&&&&&&&&&& P_int_x+=50;
&&&&&&&&&&&&&&& if (((i + 1) % 10) == 0)
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&P_int_x = 10;
&&&&&&&&&&&&&&&&&&&&P_int_y += 25;
&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& btn.Click+=new EventHandler(btn_Click);
&&&&&&&&&&&&&&& this.panel1.Controls.Add(btn);
&&&&&&&&&&&&}
&&&&&&&&}
Coding is life !
等 级:版主
威 望:36
帖 子:696
专家分:4405
FlowLayoutPanel flowLayoutPanel1 = new FlowLayoutPanel();
for (int i = 0; i & 9; i++)
&&& Button btn = new Button();
&&& btn.Height = 100;
&&& btn.Width = 100;
&&& btn.Cursor = Cursors.H&&
&&& btn.Name = btn.Text = &button& + (i + 1);
&&& flowLayoutPanel1.Dock = DockStyle.L
&&& flowLayoutPanel1.Width = 330;
&&& flowLayoutPanel1.Controls.Add(btn);
this.Controls.Add(flowLayoutPanel1);
等 级:论坛游民
帖 子:50
专家分:31
回复 3楼 yhlvht
版主大大能解释一下代码吗?有的地方看不明白程序代码:FlowLayoutPanel flowLayoutPanel1 = new FlowLayoutPanel();//为什么要添加这样一个控件?
for (int i = <font color=#; i & <font color=#; i++)
&&& Button btn = new Button();
&&& btn.Height = <font color=#;
&&& btn.Width = <font color=#;
&&& btn.Cursor = Cursors.H
&&& btn.Name = btn.Text = &button& + (i + <font color=#);
&&& flowLayoutPanel1.Dock = DockStyle.L//这个又是什么意思啊?
&&& flowLayoutPanel1.Width = <font color=#;
&&& flowLayoutPanel1.Controls.Add(btn);//
this.Controls.Add(flowLayoutPanel1);//为什么要使用这个添加?另外我要添加事件并且要添加事件响应的代码该怎么写啊?
等 级:版主
威 望:36
帖 子:696
专家分:4405
FlowLayoutPanel flowLayoutPanel1 = new FlowLayoutPanel();//为什么要添加这样一个控件?
FlowLayoutPanel是一个用于自动排列控件的panel,它会自动的排列在它里面的控件,默认是从左到右,从上到下,用这个控件,就是为了方便不用自己写代码控制button的位置
flowLayoutPanel1.Dock = DockStyle.L//这个又是什么意思啊?
这句是让FlowLayoutPanel控件停靠在主窗体上,停靠的方式并不是占满整个主窗体,而是靠左,也就是左边固定在窗体的最左边,右边的大小自己控制,为什么不全屏停靠是因为,这个控件无法让在它里面的控件自动换行,如果窗体很大,那一排就会自动放上多于3个button,所以需要手动设置FlowLayoutPanel的宽度,让它一排只能装下3个button,第4个就自动换到下一行了
this.Controls.Add(flowLayoutPanel1);//为什么要使用这个添加?
这句是将FlowLayoutPanel控件放到窗体中,动态创建的FlowLayoutPanel控件一开始并没有放到窗体中
就像动态创建的button,一开始并没有放到FlowLayoutPanel控件中一样,需要flowLayoutPanel1.Controls.Add(btn)把button放到FlowLayoutPanel中一样
事件的方法很简单,但事件有很多种,每一种的代码稍有点区别,你可以使用一个简便的方法,就是你先用静态的方式,就是弄一个button在设计器上,在事件窗口中双击创建一个事件,然后去Designer中找到自动添加的这行代码,然后复制到程序中,然后把界面还原回来。
如button的点击事件
this.button1.Click += new System.EventHandler(this.button1_Click);
// 控件名(也就是控件的Name,不是Text).Click += new System.EventHandler(响应事件的方法名)
然后就是创建响应方法,方法名要与注册事件时写的方法名一样
private void button1_Click(object sender, EventArgs e)
取消事件,跟注册事件一样,只是把+=换成-=
this.button1.Click -= new System.EventHandler(this.button1_Click);
程序执行过这一行代码后,就不会再响应点击事件了
像上面的动态的添加9个button的例子,你需要在for里面添加代码,不过要写在btn.Name = btn.Text = &button& + (i + 1);后面,因为要先赋了控件名以后,再添加事件
btn.Name.Click += new System.EventHandler(this.button1_Click);
这样9个button的点击都会进入到private void button1_Click(object sender, EventArgs e)这个方法
版权所有,并保留所有权利。
Powered by , Processed in 0.062885 second(s), 7 queries.
Copyright&, BCCN.NET, All Rights ReservedWindows 窗体设计器生成的代码 导致控件消失问题
[问题点数:60分]
Windows 窗体设计器生成的代码 导致控件消失问题
[问题点数:60分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2017年2月 总版技术专家分月排行榜第三
2018年1月 .NET技术大版内专家分月排行榜第一2017年5月 .NET技术大版内专家分月排行榜第一2017年4月 .NET技术大版内专家分月排行榜第一2017年3月 .NET技术大版内专家分月排行榜第一2017年2月 .NET技术大版内专家分月排行榜第一2016年10月 .NET技术大版内专家分月排行榜第一2016年8月 .NET技术大版内专家分月排行榜第一2016年7月 .NET技术大版内专家分月排行榜第一
2017年2月 总版技术专家分月排行榜第三
2018年1月 .NET技术大版内专家分月排行榜第一2017年5月 .NET技术大版内专家分月排行榜第一2017年4月 .NET技术大版内专家分月排行榜第一2017年3月 .NET技术大版内专家分月排行榜第一2017年2月 .NET技术大版内专家分月排行榜第一2016年10月 .NET技术大版内专家分月排行榜第一2016年8月 .NET技术大版内专家分月排行榜第一2016年7月 .NET技术大版内专家分月排行榜第一
2018年3月 .NET技术大版内专家分月排行榜第三2017年12月 .NET技术大版内专家分月排行榜第三2017年9月 .NET技术大版内专家分月排行榜第三
2017年2月 总版技术专家分月排行榜第三
2018年1月 .NET技术大版内专家分月排行榜第一2017年5月 .NET技术大版内专家分月排行榜第一2017年4月 .NET技术大版内专家分月排行榜第一2017年3月 .NET技术大版内专家分月排行榜第一2017年2月 .NET技术大版内专家分月排行榜第一2016年10月 .NET技术大版内专家分月排行榜第一2016年8月 .NET技术大版内专家分月排行榜第一2016年7月 .NET技术大版内专家分月排行榜第一
匿名用户不能发表回复!|C#工具箱里的控件可以自己设计吗?求给个大体过程,谢谢【c#吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:120,251贴子:
C#工具箱里的控件可以自己设计吗?求给个大体过程,谢谢收藏
如题 ,谢谢各位
WinForm 程序。然后, 新增一个
用户控件。然后, 自己设计那个控件。比如往那个控件上面,拖个按钮什么的。然后, 编译项目。然后工具箱那里找找,有没有你刚才创建的那个控件。图片来自:
当然可以,你百度dmskin控件库
DevExpress的也不错,用着也挺方便
登录百度帐号怎样知道C#窗体设计器上用的控件是工具箱中的哪个控件_百度知道
怎样知道C#窗体设计器上用的控件是工具箱中的哪个控件
在name、id的属性名称已更改的情况下。我的书上有C#项目案例,它里面有些控件来自添加的组件项目。
我有更好的答案
看属性栏上面的那个下拉列表啊!
采纳率:30%
为您推荐:
其他类似问题
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。【C#】自定义容器控件,设置界面控件,支持设计器拖入控件 - 梦琪小生 - 博客园
先上效果图:
1、先重写设置界面的控件功能:
public partial class SetterControl : UserControl
public SetterControl()
InitializeComponent();
Initialize();
/// &summary&
/// 获取或设置组列表
/// &/summary&
public Dictionary&string, List&SetterStrip&& I
/// &summary&
/// &/summary&
public Panel ItemContainer
{ get; set; }
///// &summary&
///// 加载
///// &/summary&
///// &param name="e"&&/param&
//protected override void OnLoad(EventArgs e)
base.OnLoad(e);
/// &summary&
/// 鼠标按下
/// &/summary&
/// &param name="e"&&/param&
protected override void OnMouseDown(MouseEventArgs e)
base.OnMouseDown(e);
this.Invalidate();
/// &summary&
/// 鼠标移动
/// &/summary&
/// &param name="e"&&/param&
protected override void OnMouseMove(MouseEventArgs e)
base.OnMouseMove(e);
this.Invalidate();
/// &summary&
/// 鼠标弹起
/// &/summary&
/// &param name="e"&&/param&
protected override void OnMouseUp(MouseEventArgs e)
base.OnMouseUp(e);
if (Items == null) return;
int index = <span style="color: #;
Point p = new Point(e.X, e.Y);
foreach (var v in Items)
Rectangle rect = new Rectangle(_itemW * index, <span style="color: #, _itemW, _itemH);
if (rect.Contains(p))
_titleIndex =
_itemIndex = <span style="color: #;
if (_titleIndex == index)
int i = <span style="color: #;
foreach (var item in v.Value)
rect = new Rectangle(<span style="color: #, i * (_itemH - <span style="color: #) + _itemH, _itemW, (_itemH - <span style="color: #));
if (rect.Contains(p))
_itemIndex =
if (ItemContainer != null && item.LocationControl != null)
ItemContainer.ScrollControlIntoView(item.LocationControl);
this.Invalidate();
/// &summary&
/// &/summary&
/// &param name="e"&&/param&
protected override void OnPaint(PaintEventArgs e)
base.OnPaint(e);
Brush brush = new SolidBrush(Color.FromArgb(<span style="color: #8, <span style="color: #8, <span style="color: #8));
e.Graphics.FillRectangle(brush, new Rectangle(<span style="color: #, <span style="color: #, this.Width, _itemH));
e.Graphics.FillRectangle(brush, new Rectangle(<span style="color: #, <span style="color: #, _itemW, this.Height));
if (Items != null)
Point p = this.PointToClient(Control.MousePosition);
StringFormat sf = new StringFormat()
LineAlignment = StringAlignment.Center
int index = <span style="color: #;
foreach (var v in Items)
Rectangle rect = new Rectangle(_itemW * index, <span style="color: #, _itemW, _itemH);
Brush b = index == _titleIndex ? Brushes.BlueViolet : rect.Contains(p) ? Brushes.Gold : Brushes.B
if (index == <span style="color: #) rect.Offset(<span style="color: #, <span style="color: #);
e.Graphics.DrawString(v.Key, this.Font, b, rect, sf);
if (index == _titleIndex)
int i = <span style="color: #;
foreach (var item in v.Value)
rect = new Rectangle(<span style="color: #, i * (_itemH - <span style="color: #) + _itemH, _itemW, (_itemH - <span style="color: #));
b = i == _itemIndex ? Brushes.White : rect.Contains(p) ? Brushes.LightGray :
e.Graphics.FillRectangle(b, rect);
rect.Offset(<span style="color: #, <span style="color: #);
e.Graphics.DrawString(item.Name, this.Font, Brushes.Black, rect, sf);
e.Graphics.DrawLine(Pens.Gray, new Point(<span style="color: #, _itemH), new Point(this.Width, _itemH));
brush.Dispose();
/// &summary&
/// 初始化
/// &/summary&
private void Initialize()
this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);
private const int _itemH = <span style="color: #;
private const int _itemW = <span style="color: #0;
private int _titleI
private int _itemI
[Serializable]
public class SetterStrip
/// &summary&
/// &/summary&
public string Name
{ get; set; }
/// &summary&
/// 组控件坐标
/// &/summary&
public Control LocationControl
{ get; set; }
2、实现设计器上直接拖入控件功能
[Designer(typeof(LDesigner))]
[DesignTimeVisible(true)]
public class MenuControlEx : SetterControl
public MenuControlEx()
InitializeComponent();
/// &summary&
/// 获取存放控件的Panel
/// &/summary&
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public Panel MenuPanel
{ get { return setterP } }
private void InitializeComponent()
this.setterPanel = new System.Windows.Forms.Panel();
this.SuspendLayout();
// setterPanel
this.setterPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.setterPanel.AutoScroll = true;
this.setterPanel.Location = new System.Drawing.Point(<span style="color: #1, <span style="color: #);
this.setterPanel.Name = "setterPanel";
this.setterPanel.Size = new System.Drawing.Size(<span style="color: #5, <span style="color: #9);
this.setterPanel.TabIndex = <span style="color: #;
// MenuControlEx
this.Controls.Add(this.setterPanel);
this.ItemContainer = this.setterP
this.Name = "MenuControlEx";
this.ResumeLayout(false);
private System.Windows.Forms.Panel setterP
public class LDesigner : ParentControlDesigner
private MenuControlEx _
public override void Initialize(IComponent component)
base.Initialize(component);
_control = (MenuControlEx)
bool succ = this.EnableDesignMode(_control.MenuPanel, "setterPanel");
if (!succ)
throw new Exception("加载控件失败");
3、使用方法:
Dictionary&string, List&DLL.Controls.SetterStrip&& items = new Dictionary&string, List&DLL.Controls.SetterStrip&&();
items.Add("基础设置", new List&DLL.Controls.SetterStrip&() {
new DLL.Controls.SetterStrip() {Name="常规", LocationControl=button1 },
new DLL.Controls.SetterStrip() { Name = "快捷键", LocationControl = button2 },
new DLL.Controls.SetterStrip() { Name = "显示", LocationControl = button3 }
items.Add("安全设置", new List&DLL.Controls.SetterStrip&() {
new DLL.Controls.SetterStrip() { Name = "安全1", LocationControl = button1 },
new DLL.Controls.SetterStrip() { Name = "安全2", LocationControl = button2 },
new DLL.Controls.SetterStrip() { Name = "安全3", LocationControl = button3 }
menuControlEx1.Items =//Name是显示的,LocationControl是用来点击按钮,控制滚动条定位的
PS. 如果是DLL方式使用,引用该DLL的地方也要引用 System.Design,否则会报错
如果需要技术交流的,可以关注微信公众号:梦琪动漫屋&
随笔 - 229

我要回帖

更多关于 服务器控件 的文章

 

随机推荐