更改已在C#中以编程方式创建的标签的文本?

时间:2018-08-03 09:04:11

标签: c# visual-studio winforms

我在应用运行时(在运行时)以编程方式在私有空隙内创建了一个名为txt1的标签,我想在另一个私有空隙内更改此标签的文本,但我无法访问从另一个空白中移至txt1

用于动态创建标签的脚本:

private void labelCreate() 
{
Label txt1 = new Label();
}

用于更改在txt1 void中创建的labelCreate文本的脚本(&该脚本不起作用,因为尚未将txt1声明为控件):

private void labelTextChange()
{
txt1.Text = "Hello World!";
}

更新1:我需要创建100个具有不同名称的标签,然后将使用for语句创建100个标签。我无法声明100个全局变量。因此,我需要传递变量,而不是将其声明为全局变量。

更新2:是否可以在for语句中将100个标签声明为全局标签?

更新3:假设我想从数据库中获取一些数据,我想将它们分别显示在唯一的标签中。因此,我给每个标签命名,并根据从DB获得的不同数据来更改它们的文本!所以我需要两个空位:一个用于根据我从数据库获得的行数创建标签,另一个用于更改我之前创建的标签文本!

  

问题::我如何访问在其他void中创建的控件?如果有答案,请共享链接:)

谢谢

4 个答案:

答案 0 :(得分:5)

在课堂上全局声明Label

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();
    }
}

答案 1 :(得分:3)

如果标签数量动态,则可以使用列表。

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

Here是有关变量的生存期及其可访问性(可以从中读取和/或写入变量的位置)的一些信息,您可以找到帮助。

答案 2 :(得分:2)

在您的代码中,Label1是一个私有变量,在 labelTextChange方法。

您需要将txt1声明为类变量。

import React from "react";
import { Route, Switch } from "react-router-dom";
import App from "./app";

const Routes = props => {
  return (
    <div>
      <Switch>
        <Route exact path="/" component={App} />
      </Switch>
    </div>
  );
};

export default Routes;

答案 3 :(得分:1)

您面临的问题与以下方面有关:

  • 在函数中创建对象时,只能在函数本身中使用它。
  • 要使用对象(在这种情况下为Label),必须在函数外部(通常在所有函数之上)声明它。 (标签txt1;)
  • 在函数外部声明Label后,可以使用一个函数实例化对象(txt1 = new Label();)
  • 在另一个功能中,您可以设置标签的.Text属性

编辑1: 您正在寻找的是一个可以存储多个标签(如列表或数组)的字段。考虑到此字段的用法,我想说一个列表是一个不错的选择。

如果您想使自己的生活更轻松,尽管可以使用ListBox或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];
    }
}