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

WindowsForms中无法创建新TextBox问题排查求助

问题排查与修复

导致TextBox无法生成/显示的关键问题:

  • 值类型结构体的修改无效
    你用struct定义TextBoxLocation,结构体是值类型,每次修改location.LocationY时操作的是拷贝后的实例,原变量的数值不会更新,导致所有新TextBox的Y坐标始终是初始值。

  • Location坐标赋值错误
    代码中box.Location = new Point(location.LocationX, location.LocationX);把Y坐标错误地设为LocationX,所有TextBox会堆叠在同一位置,看起来像是没生成。

  • 控件可见性不足
    设置了BorderStyle = BorderStyle.None但未指定Size,默认TextBox高度很小,加上无边框,肉眼几乎无法识别控件存在。

  • 方法未被触发调用
    确认FolderPathTextBox是否在CheckedListBox的事件(如ItemCheck、SelectedIndexChanged)中被正确调用,没有触发逻辑的话自然不会生成控件。

修复后的代码示例:

// 替换结构体为两个独立变量,避免值类型拷贝问题
private int _tbX = 210;
private int _tbY = 52;

private void FolderPathTextBox(object item, int textBoxNumber)
{
    TextBox box = new TextBox();
    // 修正Y坐标使用正确的变量
    box.Location = new Point(_tbX, _tbY);
    // 设置控件尺寸,确保可见
    box.Size = new Size(220, 20);
    box.Name = "folderPathTextBox" + textBoxNumber;
    box.Text = folderPath + item.ToString();
    // 无边框时设置背景色与容器区分,避免看不见
    box.BackColor = this.BackColor;
    box.BorderStyle = BorderStyle.None;
    this.Controls.Add(box);
    box.Focus();

    // 增量Y坐标,避免控件重叠
    _tbY += 25;
}

补充触发逻辑示例:

需要在CheckedListBox的事件中调用生成方法,比如勾选项时创建:

private void CheckedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
    if (e.NewValue == CheckState.Checked)
    {
        FolderPathTextBox(checkedListBox1.Items[e.Index], checkedListBox1.CheckedItems.Count);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:52:48