Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winforms 如何调用在c中动态创建的控件#_Winforms - Fatal编程技术网

Winforms 如何调用在c中动态创建的控件#

Winforms 如何调用在c中动态创建的控件#,winforms,Winforms,首先,非常感谢那些提问/回答问题的人。你能让我走这么远。 我想帮助一位年轻的比利时企业家接受挑战,开发一款媒体管理软件,在巨大的LED屏幕上显示各种媒体类型(图像、视频、链接、文本)。 我在EDI工作时,编码经验有限。 我的问题是,我根据数据库中播放列表的数量动态创建播放列表(请参见屏幕截图),但按下播放按钮时无法触发播放正确的播放列表。 警告,我的代码是noob代码。 Label playlbl=新标签(); GroupBox playlgrp=新的GroupBox(); 公共分组框addp

首先,非常感谢那些提问/回答问题的人。你能让我走这么远。 我想帮助一位年轻的比利时企业家接受挑战,开发一款媒体管理软件,在巨大的LED屏幕上显示各种媒体类型(图像、视频、链接、文本)。 我在EDI工作时,编码经验有限。 我的问题是,我根据数据库中播放列表的数量动态创建播放列表(请参见屏幕截图),但按下播放按钮时无法触发播放正确的播放列表。 警告,我的代码是noob代码。

Label playlbl=新标签();
GroupBox playlgrp=新的GroupBox();
公共分组框addplayligrp(int i、int start、int end)
{
GroupBox playlgrp=新的GroupBox();
playlgrp.Name=“playlgrp”+转换为字符串(1+i);
playligrp.Text=“播放列表”+转换为字符串(1+i);
playligrp.Font=新字体(“世纪哥特式”,12F,
FontStyle.Regular,GraphicsUnit.Point,((字节)(0));
宽度=425;
高度=525;
页边距=新填充(1);
playligrp.Location=新点(起点、终点);
返回播放列表;
}
按钮addPlayBtn(int i)
{
按钮PlayBtn=新按钮();
PlayBtn.Font=新字体(“世纪哥特式”,9.75F,
System.Drawing.FontStyle.Regular,
System.Drawing.GraphicsUnit.Point,((字节)(0));
PlayBtn.ForeColor=颜色.黑色;
PlayBtn.Location=新点(10467);
PlayBtn.Name=“PlayBtn”+转换为字符串(1+i);
PlayBtn.Size=新尺寸(100,30);
PlayBtn.TabIndex=6;
PlayBtn.Text=“播放”;
PlayBtn.UseVisualStyleBackColor=true;
PlayBtn.Click+=新事件处理程序(playBtn1\u Click);
返回PlayBtn;
}
公共BMS_main()
{
int startPos=5;
int-endPos=5;

对于(int i=1;i设置按钮的
标记
属性,该属性将帮助您稍后决定播放哪首歌曲:

playListGrp = addplayListGrp(i, startPos, endPos);
playListLbl = addLabel(i);
Label playListLblTime = addLabelTime(i);
Button PlayBtn = addPlayBtn(i);

// You can do this
PlayBtn.Tag = playListGrp; // or anything else
然后在按钮单击处理程序中,获取
标记的值
,并根据该值做出决定。请记住,无论将
标记
设置为什么,都需要将其转换回该类型。例如,在上面的示例中,我将其设置为
GroupBox
,因此我将其转换为
GroupBox

private void playBtn1_Click(object sender, EventArgs e)
{
    GroupBox gb = ((Button)(sender)).Tag as GroupBox;

    // Now make the decision
    if(gb.Name == "whatever you need to put here"){ // do whatever }
}

我会放入lisbox,然后获取并播放它。

如果愿意提供帮助,请先给我一个问题?即,在枚举.controls集合方面,您需要帮助的部分是什么?使用
标记
属性存储标识符,然后在
playBtn1\u单击
事件中选中它(
sender
是引发事件的按钮,将其强制转换为
按钮
)。也许您应该将playgrd.Add放入创建控件的循环中。否则,您只添加最后一组控件“如何调用在c#中动态创建的控件?”这是windows窗体,与调用设计器创建的控件的方式相同。设计器真正做的是处理类的一个单独部分。它编写的所有代码都是在您调用构造函数中的“InitializeComponents()”时执行的。它不能做任何您不能做的事情。@Trey,很好,如果我点击按钮[I]自动生成,我如何更改相应标签的文本。例如:我动态生成按钮并按下按钮2;我如何更改标签2的文本
private void playBtn1_Click(object sender, EventArgs e)
{
    GroupBox gb = ((Button)(sender)).Tag as GroupBox;

    // Now make the decision
    if(gb.Name == "whatever you need to put here"){ // do whatever }
}