更改在C#中以编程方式创建的标签的文本?
当应用程序运行时(在运行时),我已经在一个私有空间中以编程方式创建了一个名为更改在C#中以编程方式创建的标签的文本?,c#,visual-studio,winforms,C#,Visual Studio,Winforms,当应用程序运行时(在运行时),我已经在一个私有空间中以编程方式创建了一个名为txt1的标签,我想在另一个私有空间中更改此标签的文本,但我无法从另一个空间访问txt1 用于动态创建标签的脚本: private void labelCreate() { Label txt1 = new Label(); } 用于更改已在labelCreatevoid中创建的txt1文本的脚本(由于txt1未声明为控件,因此此脚本不起作用(&C)): 更新1:我需要创建100个具有不同名称的标签,然后我将使用fo
txt1
的标签,我想在另一个私有空间中更改此标签的文本,但我无法从另一个空间访问txt1
用于动态创建标签的脚本:
private void labelCreate()
{
Label txt1 = new Label();
}
用于更改已在labelCreate
void中创建的txt1
文本的脚本(由于txt1
未声明为控件,因此此脚本不起作用(&C)):
更新1:我需要创建100个具有不同名称的标签,然后我将使用for
语句创建100个标签。我不能声明100个全局变量。所以我需要传递变量,而不是将它们声明为全局变量
更新2:是否可以将语句中的100个标签声明为全局标签
更新3:假设我想从数据库中获取一些数据,我想用唯一的标签分别显示它们。所以我给每个标签命名&我根据从数据库中获得的不同数据更改它们的文本!因此,我需要两个空格:一个用于根据我从DB获得的行数创建标签,另一个用于更改我以前创建的标签文本
问题:我如何访问在不同的void中创建的控件?如果有答案,请共享链接:)
谢谢在您的课堂上全面申报标签
Label txt1;
private void labelCreate()
{
txt1 = new Label();
}
而不是用另一种方法访问
private void labelTextChange()
{
txt1.Text = "Hello World!";
}
编辑1
如果有多个标签,则在创建标签时,可以将这些对象存储在数组中,并且在需要更改这些文本时,可以这样做
Label[] labelsArray //declare globally
private void labelTextChange()
{
// Get Label objects from array
labelsArray = { label1, label2, label3, label4, label5 };
for (int i = 0; i < labelsArray.Count(); i++)
{
labelsArray[i].Text = "Hello.. " + (i + 1).ToString();
}
}
Label[]标签数组//全局声明
私有void labelTextChange()
{
//从数组中获取标签对象
labelsArray={label1,label2,label3,label4,label5};
对于(int i=0;i
您面临的问题与以下方面有关:
- 在函数中创建对象时,只能在函数本身中使用它
- 为了能够使用对象(本例中为标签),您必须在函数之外声明它,通常是在所有函数之外。(标签txt1;)
- 在函数外部声明标签后,可以使用一个函数实例化对象(txt1=new Label();)
- 在另一个函数中,可以设置标签的.Text属性
编辑1:
您要查找的是一个可以存储多个标签(如列表或数组)的字段。考虑到这个字段的使用,我认为列表是一个很好的选择
如果你想让你的生活更轻松,我会使用一个列表框或DataGridView,而不是很多标签。据我所知,标签并不是按照您所描述的方式使用的,正如我上面所描述的,还有一些其他控件更适合这种应用程序
编辑2:
int amountOfRows;
Label[] labels;
public void setLabels(List<string> inputData)
{
//allocate memory for the array
amountOfRows = inputData.Count;
labels = new Label[amountOfRows];
for(int i=0; i<amountOfRows; i++)
{
labels[i] = new Label();
//set properties like location and size of labels here first
labels[i].Text = inputData[i];
}
}
int-amountOfRows;
标签[]标签;
公共无效集合标签(列表输入数据)
{
//为阵列分配内存
amountOfRows=inputData.Count;
标签=新标签[数量];
代码标签1中的for(int i=0;i是一个私有变量,在
labelTextChange方法
您需要将txt1声明为类变量
Label txt1;
private void labelCreate()
{
txt1 = new Label();
}
private void labelTextChange()
{
txt1.Text = "Hello World!";
}
如果标签数量是动态的,则可以使用列表
List<Label> labels;
private void labelCreate()
{
labels = new List<Label>();
for(int i = 0; i < 100; i++)
{
labels.Add(new Label());
}
}
private void labelTextChange()
{
// use the index or search for the name of the label
labels[42].Text = "Hello World!";
}
列出标签;
私有void labelCreate()
{
标签=新列表();
对于(int i=0;i<100;i++)
{
标签。添加(新标签());
}
}
私有void labelTextChange()
{
//使用索引或搜索标签的名称
标签[42]。Text=“你好,世界!”;
}
是关于变量的生存期及其可访问性的一些信息(变量可以从中读取和/或写入)您可以找到helpflul。将其作为类的一个字段。@BiesiGrr:您能提供一个资源或完整的答案吗?您实现此功能所采用的方法将使软件变得非常复杂,因为label控件不是设计为这样使用的,还有其他控件提供了帮助n显示表格数据的可选性。您需要做一些ui工作,例如设置标签的位置和大小。@Lennart:我正在用标签模拟场景,只是作为一个例子。@E.Mamaghani:啊,好吧。.我想您知道变量范围是什么。如果您使用循环创建标签,是否有必要更改标签中的文本只有另一种方法?或者您有任何特定的要求。我想从数据库中获取一些数据,我想在唯一的标签中分别显示它们。因此,我命名每个标签&我根据从数据库中获取的不同数据更改它们的文本!您在调用内部服务labelCreate()时是否面临任何问题
我需要在两个不同的空白中实现此方案:一个用于根据我从DB获得的行数创建标签,另一个用于更改我以前创建的标签文本!您可以再次检查此问题!我已更新了一些部分:)谢谢
List<Label> labels;
private void labelCreate()
{
labels = new List<Label>();
for(int i = 0; i < 100; i++)
{
labels.Add(new Label());
}
}
private void labelTextChange()
{
// use the index or search for the name of the label
labels[42].Text = "Hello World!";
}