
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 描述的一塌糊涂,确实是个初学者; 感觉要的是这个: 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 |