1
Rocketer 2023-05-08 10:20:26 +08:00 via iPhone
动态变量名?那你得用反射了。
数组不行吗?为什么非得动态变量名? |
2
buxiugangpen OP @Rocketer 大佬,反射咋用,还没搞会反射啊,,,,数组应该是可以的,因为我刚学到结构体,所以想试试用结构体来写这个小功能。。。
|
3
csrocks 2023-05-08 10:45:45 +08:00
var dict = new ..<string, struct>();
for(..){ var s = new struct; s.xx=xx; dict.add(name, s); } |
4
buxiugangpen OP @csrocks 大佬好,大佬,我没看懂,有注释没
|
5
reallittoma 2023-05-08 11:00:00 +08:00
$["jgt"+j]这是什么写法?我咋看不懂 C#了……
|
6
apie 2023-05-08 11:05:04 +08:00
能上 v2 应该能找到免费 chat-gpt 吧,这种问题,最适合用 chat-gpt 来解决了,一方面你可以锻炼自己描述问题的能力,另一方面,能够给你及时和针对性的反馈。不是说群友回答得不好,而是这样效率太低了。
|
7
buxiugangpen OP @reallittoma 这样写变 string 了,拼接变量的
|
8
buxiugangpen OP @apie 1 块钱一个月的 vpn ,ip 不稳定,chat-gpt 基本上没成功过,,,挨~!~
|
9
buxiugangpen OP @reallittoma 拼接字符串,不是变量。。。。
|
10
wu00 2023-05-08 11:14:15 +08:00 1
描述的一塌糊涂,确实是个初学者;
感觉要的是这个: UI 界面动态添加出行人[姓名、手机号...],提交时拿到所有出行人对象 ``` var jiegoutis = new List<jiegouti>(); foreach(var container in containers) { jiegoutis.Add(new jiegouti { data_bj = container.txbox_bj.Text; data_bx = container.txbox_bx.Text; ... }) } ``` |
11
TiggeYL 2023-05-08 11:17:55 +08:00
建议用数组( Array )、枚举(继承 IEnumerable 的 比如 List<T>)或者字典( Dictionary<string,T>),
T 是泛型 |
12
unclejock 2023-05-08 11:21:26 +08:00
花几十块钱开个 vpn 吧...
|
13
buxiugangpen OP @wu00 多谢大佬,我试试,这个勉强能看明白
|
14
buxiugangpen OP @unclejock 大佬,推荐个,我现在花了 20 多,买了两年多的这个一块的 vpn
|
15
buxiugangpen OP @TiggeYL 我都试试看看那个效率高,,反射我也研究下,反正也不是啥着急的功能,有的是时间
|
16
unclejock 2023-05-08 14:14:03 +08:00
@buxiugangpen
v:cmF5c2VhcmNoZXI= |
17
kop1989smurf 2023-05-08 14:44:13 +08:00
动态生成、调用变量:用反射。
但一般情况下,UI 的呈现逻辑是不需要反射的,除非你用错了组件的使用方式。 比如你靠 button 、label 去呈现列表数据。 |
18
buxiugangpen OP @kop1989smurf 大佬,,,我用的是 textbox ,,现在 textbox 的名字不知道怎么弄到循环里,,,比如 a1= textbox1.text a2= textbox2.text a3= textbox3.text 怎么 textbox+数字 这个就不知道怎么弄了
|
19
kop1989smurf 2023-05-08 15:23:39 +08:00
@buxiugangpen 从你描述的情境下来看,你只需要遍历某 panel 下的 textbox 组件就可以了,并不需要反射。
搜索关键词:winform 遍历组件 例如这篇文章: https://www.cnblogs.com/winformasp/articles/11865326.html |
20
buxiugangpen OP @kop1989smurf 是想遍历,但是因为 textbox 的数量不确定,还有时间的控件,主要是想学一下,控件名称怎么拼接,拼接后还能调用控件的属性
|
21
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 来获取其值。 我们将每个结构体对象添加到列表中,这样列表中就包含了全部的结构体对象。你可以通过遍历这个列表来获取每个结构体对象及其包含的字段值。 |
22
ybs123 2023-05-09 10:13:47 +08:00
获取当前页面上的所有 TextBox 控件数量
int count = this.Controls.OfType<TextBox>().Count(); |
23
buxiugangpen OP @ybs123 大佬,我试试了下,但是提示 FindControl 不存在,,,不知道为啥
|
24
ybs123 2023-05-09 15:44:07 +08:00
@buxiugangpen 至少三四种方式获取,你自己可以百度搜索下,我举个例子
this.Controls.OfType<TextBox>().Where(c =>c.Name==拼接的控件名).FirstOrDefault()?.Text??""; |
25
buxiugangpen OP |