初学者咨询一个 C#的问题,求大佬解答啊

2023-05-08 09:58:30 +08:00
 buxiugangpen
我需要创建一个结构体
struct jiegouti
{
public string data_bj;
public string data_bx;
public string data_tx;
public string data_ty;
}
现在想根据页面数据的数量来自动创建多个结构体,比如
jiegouti jgt1;
jiegouti jgt2;
jiegouti jgt3;
jiegouti jgt4;

这些结构体要获取类似的控件数据
比如下面的
jgt1.data_bj = txbox_bj1.Text;
jgt1.data_bx = txbox_bx1.Text;
jgt1.data_tx = txbox_tx1.Text;
jgt1.data_ty = txbox_ty1.Text;

jgt2.data_bj = txbox_bj2.Text;
jgt2.data_bx = txbox_bx2.Text;
jgt2.data_tx = txbox_tx2.Text;
jgt2.data_ty = txbox_ty2.Text;

我现在想要写个循环,来根据页面的数量自动创建结构体,并且获取每个结构体字段下面的控件数值,应该怎么写,我写出来的结构体中的局部变量都变成字符串了,,
我的大概写法,如下,求大佬帮忙看看咋弄。
for(int j=1;j<=6;j++){
$["jgt"+j].data_bj = $["txbox_bj"+j].Text
}
2085 次点击
所在节点    C#
25 条回复
ybs123
2023-05-09 10:05:36 +08:00
你可以使用一个列表来保存你的结构体,这样就可以根据页面数据的数量动态创建结构体了。在循环中,你可以使用循环变量来拼接控件名称,并使用 FindControl 方法来获取控件对象,然后根据需要对结构体进行赋值。

示例代码如下:
```
int n = 4; // 页面数据的数量
List<jiegouti> jgtList = new List<jiegouti>(); // 声明一个列表来保存结构体

// 循环创建结构体并给字段赋值
for (int i = 1; i <= n; i++)
{
jiegouti jgt = new jiegouti();
jgt.data_bj = ((TextBox)FindControl("txbox_bj" + i.ToString())).Text;
jgt.data_bx = ((TextBox)FindControl("txbox_bx" + i.ToString())).Text;
jgt.data_tx = ((TextBox)FindControl("txbox_tx" + i.ToString())).Text;
jgt.data_ty = ((TextBox)FindControl("txbox_ty" + i.ToString())).Text;
jgtList.Add(jgt); // 将结构体添加到列表中
}
```

在循环中,我们使用了 FindControl 方法来查找页面上的控件。该方法会返回一个控件对象,因此我们不需要再使用索引 0 来获取控件对象,然后再将其转换为 TextBox 来获取其值。

我们将每个结构体对象添加到列表中,这样列表中就包含了全部的结构体对象。你可以通过遍历这个列表来获取每个结构体对象及其包含的字段值。
ybs123
2023-05-09 10:13:47 +08:00
获取当前页面上的所有 TextBox 控件数量

int count = this.Controls.OfType<TextBox>().Count();
buxiugangpen
2023-05-09 13:53:26 +08:00
@ybs123 大佬,我试试了下,但是提示 FindControl 不存在,,,不知道为啥
ybs123
2023-05-09 15:44:07 +08:00
@buxiugangpen 至少三四种方式获取,你自己可以百度搜索下,我举个例子
this.Controls.OfType<TextBox>().Where(c =>c.Name==拼接的控件名).FirstOrDefault()?.Text??"";
buxiugangpen
2023-05-10 10:35:29 +08:00
@ybs123 多谢大佬,我写了个 FindControl 方法,返回 this.Controls.OfType<TextBox>().SingleOrDefault(c => c.Name == name) 然后用 ((TextBox)FindControl("txbox_bj" + i.ToString())).Text;解决了变量名带参数的问题,多谢大佬,,

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/938154

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX