Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.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
更改在C#中以编程方式创建的标签的文本?_C#_Visual Studio_Winforms - Fatal编程技术网

更改在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!";
}