求教 C#窗体中动态添加了Panel,再如何动态的在Panel中添加文本框控件呢?

求教 C#窗体中动态添加了Panel,再如何动态的在Panel中添加文本框控件呢?,第1张

inti=0

privatevoidbutton1_Click(objectsender,EventArgse)

{

TextBoxtb=newTextBox()

tb.Name="tb_"+i.ToString()

tb.Text=(i+2).ToString()

tb.Width=200

tb.Height=30

tb.Location=newPoint(0,0+i*30)

i++

this.panel1.Controls.Add(tb)

}

扩展资料

C#的优点

C#将实现更多的函数式编(FP)程概念物肢,TypeClasses就是FP概念之一。在函数式编程老携中,TypeClasses允许您在类型上添加一组 *** 作,但不实现它。由于实现是在其他地方完成的,这是一种多态,它比面向对象编程语言中的class更灵活。

TypeClasses和C#接口具有相似的用途,但它们的工作方式有所侍蚂伏不同,在某些情况下,由于处理固定类型而不是继承层次结构,因此TypeClasses更易于使用。

参考资料来源:百度百科—c#

使用 Panel 控件可对控件进行分组,本身就是谨伍个容器。

可以更好的对组内控件进行控制,比如单个命令隐藏或显示一组控制;设置组背景图;控制组内控件整体移动等等。

类似于html中div。

延展阅读:

高级编程c#中Panel控件用于为其他控件提供可识别的分组。通常,使用面板按功能细分窗体。例如,可能有一知晌判个订单窗体,它指定邮寄选项(如使用哪一类通营承运商)。将所有选项分组在一个面板中可向用户搭改提供逻辑可视提示。在设计时所有控件都可以轻松移动 -- 当移动 Panel 控件时,它包含的所有控件也将移动。

这是我昨晚写的,由于宿舍停电了,没能发给你,今天补上。

Form1_Paint是窗体 重绘事件 ,弄错了就看不到稿轮效果了。好了 上代码:

你上图片后,由于我的线条是画在窗体上的,所以被遮盖了。如果你要频繁修改panel里的图片的话,那么每次画完后就不能清空线条集合,得留着。然后就把窗体的重绘事件改成 panel的重绘事件,让画图是针对panel的,无论窗体怎么变都不关panel的事,修改后的代码:

/* 保存线条的集合,每个线条又两个坐标构成(两点画一条键肢信直线) */

List<Point[]>lineList = new List<Point[]>()

private void Form1_Load(object sender, EventArgs e)

{

panel1.BackColor = Color.Transparent//如果不设置成透明,将看不到效果

panel1.BorderStyle = BorderStyle.FixedSingle//顺便把panel的边框也显示出来

}

/// <summary>

/// 切割你的panel,切割写成方法后,以后你想分几份就几份,可以是 2x10 、

///5x13 、10x10 总之随便你了

/// </summary>

/// <param name="row">你想切成几行?</param>

/// <param name="col">你想切成几列?</param>

private void CutsPanel(int row, int col)

{

Point[] line = null//线条坐标变量

/* 注意,由于有时切割得太细,所以会有误差, 如 20x20 */

int rowCutValue = panel1.Width / row//行分割量 = 宽 除以 行

int colCutValue = panel1.Height / col//列分割量 = 高 除以 列饥雀

int x = 0

int y = 0

/* 先分割行 */

for (int i = 0i <row - 1i++)

{

line = new Point[2]//每次都是新直线,所以要new一下,避免覆盖原来的线条

x += rowCutValue//注意是 +=号,因为每增加一条分割线就要向后移一个行分割量

line[0] = new Point(x, 0)//此条分割线的上端:在panel原y轴不变,但是x轴的值变为 x + rowCutValue

line[1] = new Point(x, panel1.Height)//此条分割线的下端:就是上端位置下移panel的高度

lineList.Add(line)//把所有线条添加到集合中去,待会一起画到panel上去

}

/* 再分割列,方法都一样 */

for (int i = 0i <col - 1i++)

{

line = new Point[2]

y += colCutValue

line[0] = new Point(0, y)//此条分割线的左端:在panel原x轴不变,但是y轴的值变为 y + colCutValue

line[1] = new Point(0 + panel1.Width, y)//此条分割线的右端:就是左端位置右移panel的宽度

lineList.Add(line)//把所有线条添加到集合中去,待会一起画到panel上去

}

/* 添加完毕,准备使用 panel1_Paint事件,用e.Graphics.DrawLine(Pen pen,Point p1, Point p2)划线 */

}

private void panel1_Paint(object sender, PaintEventArgs e)

{

//e.Graphics.DrawLine(new Pen(Color.Black,2),new Point(10,10), new Point(50,50))

Pen pen = new Pen(Color.Black, 2)//定义一个钢笔:黑色,画笔大小 2

/* 用循环,把所有的线都画上去; */

for (int i = 0i <lineList.Counti++)

{

Point p1 = lineList[i][0]//这里你应该看得懂吧? 分别获取存进集合里的数组里的 两个点坐标

Point p2 = lineList[i][1]

/* 画分割线 */

e.Graphics.DrawLine(pen, p1, p2)

}

}

private void button1_Click(object sender, EventArgs e)

{

lineList.Clear()//每次重新画才清空线条集合

CutsPanel(2, 2)//调用方法把panel分割成 2x2 的网格

//CutsPanel(21, 21)//可以是 21x21 哟

panel1.Refresh()//刷新panel,不然看不到效果

}

private void button2_Click(object sender, EventArgs e)

{

lineList.Clear()//每次重新画才清空线条集合

CutsPanel(3, 3)//调用方法把panel分割成 3x3 的网格

panel1.Refresh()//刷新panel,不然看不到效果

}

private void button3_Click(object sender, EventArgs e)

{

lineList.Clear()//每次重新画才清空线条集合

CutsPanel(4, 4)//调用方法把panel分割成 4x4 的网格

panel1.Refresh()//刷新panel,不然看不到效果

}

没改多少代码,希望你能自己看懂改哪些地方了,不思考的话学起很慢的。加油吧


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11977394.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存