我在应用运行时(在运行时)以编程方式在私有空隙内创建了一个名为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中创建的控件?如果有答案,请共享链接:)
谢谢
答案 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)
您面临的问题与以下方面有关:
编辑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];
}
}