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
相关产品推荐
相关产品推荐

