You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Panel容器内TextBox控件的输入值

动态创建TextBox按从左到右顺序读取输入值的实现方案

核心原因:Panel的控件集合默认按照控件创建顺序或Z轴层级存储,不会自动匹配视觉上的从左到右排列顺序,需手动排序后再取值。

WinForm 场景实现方案

方案1:按控件水平位置排序(无需修改创建逻辑)

直接根据TextBox的Left属性(控件左上角距离Panel左边缘的水平坐标)升序排序,即可得到从左到右的顺序:

// 筛选Panel内所有TextBox控件并按水平位置排序
var sortedTextBoxes = panel1.Controls.OfType<TextBox>()
                           .OrderBy(textBox => textBox.Left)
                           .ToList();

// 按顺序读取数值
List<int> resultValues = new List<int>();
foreach (var textBox in sortedTextBoxes)
{
    if (int.TryParse(textBox.Text, out int value))
    {
        resultValues.Add(value);
    }
}

如果存在多行TextBox,需要先从上到下、再从左到右取值,可以增加垂直位置排序规则:

var sortedTextBoxes = panel1.Controls.OfType<TextBox>()
                           .OrderBy(textBox => textBox.Top) // 先按垂直位置排序,保证从上到下
                           .ThenBy(textBox => textBox.Left) // 同垂直位置再按水平位置排序,保证从左到右
                           .ToList();

方案2:创建控件时标记顺序(性能更高)

如果创建控件的逻辑可修改,可以在创建时给Tag属性赋值顺序标记,后续直接按标记排序即可:

// 创建控件时标记顺序
for (int i = 0; i < 需要创建的TextBox数量; i++)
{
    TextBox newTextBox = new TextBox();
    newTextBox.Tag = i; // 按从左到右的创建顺序赋值标记
    // 其余控件位置、样式赋值逻辑
    panel1.Controls.Add(newTextBox);
}

// 取值时按标记排序
var sortedTextBoxes = panel1.Controls.OfType<TextBox>()
                           .OrderBy(textBox => (int)textBox.Tag)
                           .ToList();

WPF 场景实现方案

WPF中需先获取控件相对于Panel的水平坐标再排序:

var sortedTextBoxes = panel1.Children.OfType<TextBox>()
                           .OrderBy(textBox => 
                                textBox.TransformToAncestor(panel1)
                                .Transform(new Point(0,0)).X)
                           .ToList();

内容的提问来源于stack exchange,提问作者fatihkadiryilmaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 05:54:04