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

VB.NET动态创建TextBox时宽度无法适配页面宽度如何解决

问题原因

你遇到的是textarea(ASP.NET的MultiLine模式TextBox渲染后的原生标签)的默认盒模型计算规则导致的宽度溢出问题:
浏览器默认给textarea设置了非0的padding、border,且默认盒模型为content-box,此时你设置的width:20%仅指代内容区宽度,加上边框、内边距后总宽度会超过20%,一行无法放下5个输入框,就会出现右侧留白。而Button控件的默认盒模型规则或内置样式刚好适配了宽度计算,所以显示正常。

解决方案

方法1:直接在动态创建控件时添加样式修正

创建TextBox时追加盒模型、边距相关样式即可,修改你的代码如下:

For i As Integer = 1 To 100
        Dim newtext = New TextBox()
        newtext.TextMode = TextBoxMode.MultiLine
        newtext.Style.Add("width", "20%")
        newtext.Style.Add("height", "100%")
        ' 追加以下3行样式
        newtext.Style.Add("box-sizing", "border-box")
        newtext.Style.Add("margin", "0")
        newtext.Style.Add("padding", "2px") ' 可根据需要调整内边距大小,不会额外撑宽
        Panel2.Controls.Add(newtext)                
Next

方法2:通过全局CSS统一管控(更易维护)

先在页面头部添加CSS规则:

<style>
/* 给Panel2设置类名,避免影响其他页面元素 */
.panel2-wrap {
    box-sizing: border-box;
    font-size: 0; /* 消除inline元素之间的默认空格间隙 */
}
.panel2-wrap textarea {
    box-sizing: border-box;
    width: 20%;
    height: 100%;
    margin: 0;
    padding: 2px;
    font-size: 14px; /* 单独设置输入框字体大小,覆盖父容器的font-size:0 */
}
</style>

然后后台给Panel2设置对应类名,无需给每个动态TextBox单独加样式:

' 页面初始化时给Panel2加类名
Panel2.CssClass = "panel2-wrap"

For i As Integer = 1 To 100
        Dim newtext = New TextBox()
        newtext.TextMode = TextBoxMode.MultiLine
        Panel2.Controls.Add(newtext)                
Next

额外检查项

如果修改后还有留白,可确认Panel2本身是否设置了padding、border,若有也给Panel2加上box-sizing: border-box即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:39:04