初学者咨询一个 C#的问题,求大佬解答啊 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
buxiugangpen
V2EX    C#

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

  •  
  •   buxiugangpen 2023-05-08 09:58:30 +08:00 2903 次点击
    这是一个创建于 923 天前主题,其中的信息可能已经有所发展或是发生改变。
    我需要创建一个结构体
    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
    }
    25 条回复    2023-05-10 10:35:29 +08:00
    Rocketer
        1
    Rocketer  
       2023-05-08 10:20:26 +08:00 via iPhone
    动态变量名?那你得用反射了。

    数组不行吗?为什么非得动态变量名?
    buxiugangpen
        2
    buxiugangpen  
    OP
       2023-05-08 10:24:26 +08:00
    @Rocketer 大佬,反射咋用,还没搞会反射啊,,,,数组应该是可以的,因为我刚学到结构体,所以想试试用结构体来写这个小功能。。。
    csrocks
        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);
    }
    buxiugangpen
        4
    buxiugangpen  
    OP
       2023-05-08 10:53:57 +08:00
    @csrocks 大佬好,大佬,我没看懂,有注释没
    reallittoma
        5
    reallittoma  
       2023-05-08 11:00:00 +08:00
    $["jgt"+j]这是什么写法?我咋看不懂 C#了……
    apie
        6
    apie  
       2023-05-08 11:05:04 +08:00
    能上 v2 应该能找到免费 chat-gpt 吧,这种问题,最适合用 chat-gpt 来解决了,一方面你可以锻炼自己描述问题的能力,另一方面,能够给你及时和针对性的反馈。不是说群友回答得不好,而是这样效率太低了。
    buxiugangpen
        7
    buxiugangpen  
    OP
       2023-05-08 11:11:08 +08:00
    @reallittoma 这样写变 string 了,拼接变量的
    buxiugangpen
        8
    buxiugangpen  
    OP
       2023-05-08 11:12:03 +08:00
    @apie 1 块钱一个月的 vpn ,ip 不稳定,chat-gpt 基本上没成功过,,,挨~!~
    buxiugangpen
        9
    buxiugangpen  
    OP
       2023-05-08 11:13:16 +08:00
    @reallittoma 拼接字符串,不是变量。。。。
    wu00
        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;
    ...
    })
    }
    ```
    TiggeYL
        11
    TiggeYL  
       2023-05-08 11:17:55 +08:00
    建议用数组( Array )、枚举(继承 IEnumerable 的 比如 List<T>)或者字典( Dictionary<string,T>),
    T 是泛型
    unclejock
        12
    unclejock  
       2023-05-08 11:21:26 +08:00
    花几十块钱开个 vpn 吧...
    buxiugangpen
        13
    buxiugangpen  
    OP
       2023-05-08 11:35:32 +08:00
    @wu00 多谢大佬,我试试,这个勉强能看明白
    buxiugangpen
        14
    buxiugangpen  
    OP
       2023-05-08 11:36:40 +08:00
    @unclejock 大佬,推荐个,我现在花了 20 多,买了两年多的这个一块的 vpn
    buxiugangpen
        15
    buxiugangpen  
    OP
       2023-05-08 11:37:32 +08:00
    @TiggeYL 我都试试看看那个效率高,,反射我也研究下,反正也不是啥着急的功能,有的是时间
    unclejock
        16
    unclejock  
       2023-05-08 14:14:03 +08:00
    @buxiugangpen
    v:cmF5c2VhcmNoZXI=
    kop1989smurf
        17
    kop1989smurf  
       2023-05-08 14:44:13 +08:00
    动态生成、调用变量:用反射。

    但一般情况下,UI 的呈现逻辑是不需要反射的,除非你用错了组件的使用方式。
    比如你靠 button 、label 去呈现列表数据。
    buxiugangpen
        18
    buxiugangpen  
    OP
       2023-05-08 15:04:07 +08:00
    @kop1989smurf 大佬,,,我用的是 textbox ,,现在 textbox 的名字不知道怎么弄到循环里,,,比如 a1= textbox1.text a2= textbox2.text a3= textbox3.text 怎么 textbox+数字 这个就不知道怎么弄了
    kop1989smurf
        19
    kop1989smurf  
       2023-05-08 15:23:39 +08:00
    @buxiugangpen 从你描述的情境下来看,你只需要遍历某 panel 下的 textbox 组件就可以了,并不需要反射。
    搜索关键词:winform 遍历组件
    例如这篇文章: https://www.cnblogs.com/winformasp/articles/11865326.html
    buxiugangpen
        20
    buxiugangpen  
    OP
       2023-05-09 09:47:24 +08:00
    @kop1989smurf 是想遍历,但是因为 textbox 的数量不确定,还有时间的控件,主要是想学一下,控件名称怎么拼接,拼接后还能调用控件的属性
    ybs123
        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 来获取其值。

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

    int count = this.Controls.OfType<TextBox>().Count();
    buxiugangpen
        23
    buxiugangpen  
    OP
       2023-05-09 13:53:26 +08:00
    @ybs123 大佬,我试试了下,但是提示 FindControl 不存在,,,不知道为啥
    ybs123
        24
    ybs123  
       2023-05-09 15:44:07 +08:00
    @buxiugangpen 至少三四种方式获取,你自己可以百度搜索下,我举个例子
    this.Controls.OfType<TextBox>().Where(c =>c.Name==拼接的控件名).FirstOrDefault()?.Text??"";
    buxiugangpen
        25
    buxiugangpen  
    OP
       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;解决了变量名带参数的问题,多谢大佬,,
    关于     帮助文档     自助推广系统     博客     API     < href="/faq" class="dark" target="_self">FAQ     Solana     2435 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 06:39 PVG 14:39 LAX 22:39 JFK 01:39
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86