【发布时间】:2019-05-29 13:29:58
【问题描述】:
我试图在单击按钮时更改 TextBox 的文本:两个控件都是在运行时动态创建的。
每次单击另一个按钮时都会创建按钮和文本框。
每个控件的Name 属性由用户使用文本框指定。
例如用户输入“Test1”,则Button命名为btn_Test1,TextBox命名为txt_Test1。
按钮应该打开一个FolderBrowserDialog,并且在做出选择之后,文本框会显示选择的路径。
我正在使用以下代码:
protected void button_Click(object sender, EventArgs e)
{
Button button = sender as Button;
folderBrowserDialog.ShowDialog();
string TextName = button.Name.Replace("btn_", "txt_");
TextBox selectText = new TextBox();
selectText = this.Controls[TextName] as TextBox;
selectText.Text = folderBrowserDialog.SelectedPath;
}
但是这部分给了我null:
selectText = this.Controls[TextName] as TextBox;
我在创建控件时确实检查了调试器,因此 TextName 设置了正确的名称。
Buttons 和 TextBoxes 被插入到 TabControls 中,Tab Name 设置为用户输入的值,因此主 TabControl 有 2 个控件。
我正在使用一个名为“TabFolders”的隐藏 TabControl,它将作为创建选项卡克隆的主要参考
我正在使用此代码:
private void CreateDynamicPathButtons(string TabName)
{
TabPage MyNewTab = new TabPage(TabName);
TabPage TabCopy1;
tabControlEmpresas.TabPages.Add(MyNewTab);
TabControl tc = new TabControl();
tc.Location = new System.Drawing.Point(6, 6);
tc.Size = TabFolders.Size;
for (int i = 0; i < TabFolders.TabCount; i++) {
TabFolders.SelectTab(i);
TabCopy1 = new TabPage(TabFolders.SelectedTab.Text);
foreach (Control c in TabFolders.SelectedTab.Controls) {
Control cNew = (Control)Activator.CreateInstance(c.GetType());
cNew.Text = c.Text;
cNew.Size = c.Size;
cNew.Location = new System.Drawing.Point(c.Location.X, c.Location.Y);
cNew.Visible = true;
if (cNew is TextBox) {
cNew.Name = "txt_" + MyNewTab.Text + "_" + TabFolders.SelectedTab.Text;
}
if (cNew is Button) {
cNew.Name = "btn_" + MyNewTab.Text + "_" + TabFolders.SelectedTab.Text;
cNew.Click += new EventHandler(button_Click);
}
TabCopy1.Controls.Add(cNew);
}
tc.TabPages.Add(TabCopy1);
}
MyNewTab.Controls.Add(tc);
}
【问题讨论】: