C# 如何与两个生成的控件进行交互?
C# How do I interact with two generated controls?
我有一个 Checkbox
,标记后会创建一个 Listbox
、Button
和一个 Textbox
。
生成的 Button
应该有 Click
事件来用 generated[=30] 的值填充 generated Listbox
=] Textbox
。
但我在 public System.Windows.Forms.Button AddNewButton()
中得到 编译时错误 :
The name Txb does nost exist in the current context
The name lb does nost exist in the current context
代码如下:
private void cbDd_CheckedChanged(object sender, EventArgs e)
{
AddNewListBox();
AddNewTextBox();
AddNewButton();
}
public System.Windows.Forms.ListBox AddNewListBox()
{
System.Windows.Forms.ListBox lb = new System.Windows.Forms.ListBox();
this.Controls.Add(lb);
lb.Top = 74;
lb.Left = 500;
cLeft = cLeft + 1;
return lb;
}
public System.Windows.Forms.TextBox AddNewTextBox()
{
System.Windows.Forms.TextBox txb = new System.Windows.Forms.TextBox();
this.Controls.Add(txb);
txb.Top = 180;
txb.Left = 500;
txb.Text = "item name";
cLeft = cLeft + 1;
return txb;
}
public System.Windows.Forms.Button AddNewButton()
{
System.Windows.Forms.Button btn = new System.Windows.Forms.Button();
this.Controls.Add(btn);
btn.Top = 210;
btn.Left = 500;
btn.Text = "Add item";
btn.Click += (s, e) => { if (string.IsNullOrEmpty(txb.Text)) return;
};
lb.Items.Add(cbTxb.Text);
return btn;
}
除了AddNew
(ListBox|TextBox|Button
)
public System.Windows.Forms.ListBox AddNewListBox()
{
return new System.Windows.Forms.ListBox() {
Location = new Point(500, 74),
parent = this, // instead of this.Controls.Add(...)
};
}
public System.Windows.Forms.TextBox AddNewTextBox()
{
return new System.Windows.Forms.TextBox() {
Location = new Point(500, 180),
Text = "item name",
Parent = this,
};
}
public System.Windows.Forms.Button AddNewButton()
{
return new System.Windows.Forms.Button() {
Location = new Point(500, 210),
Text = "Add item",
Parent = this,
};
}
我建议实现 AddNewControls()
,其中创建的控件可以 交互 :
private void AddNewControls() {
var lb = AddNewListBox();
var txb = AddNewTextBox();
var btn = AddNewButton();
btn.Click += (s, e) => {
// now btn (button) can use txb (TextBox)
if (string.IsNullOrEmpty(txb.Text))
return;
//TODO: put relevant code here
}
cLeft += 3;
//TODO: check lb and cbTxb.Text
lb.Items.Add(cbTxb.Text);
}
然后你可以把
private void cbDd_CheckedChanged(object sender, EventArgs e)
{
AddNewControls();
}
我有一个 Checkbox
,标记后会创建一个 Listbox
、Button
和一个 Textbox
。
生成的 Button
应该有 Click
事件来用 generated[=30] 的值填充 generated Listbox
=] Textbox
。
但我在 public System.Windows.Forms.Button AddNewButton()
中得到 编译时错误 :
The name Txb does nost exist in the current context
The name lb does nost exist in the current context
代码如下:
private void cbDd_CheckedChanged(object sender, EventArgs e)
{
AddNewListBox();
AddNewTextBox();
AddNewButton();
}
public System.Windows.Forms.ListBox AddNewListBox()
{
System.Windows.Forms.ListBox lb = new System.Windows.Forms.ListBox();
this.Controls.Add(lb);
lb.Top = 74;
lb.Left = 500;
cLeft = cLeft + 1;
return lb;
}
public System.Windows.Forms.TextBox AddNewTextBox()
{
System.Windows.Forms.TextBox txb = new System.Windows.Forms.TextBox();
this.Controls.Add(txb);
txb.Top = 180;
txb.Left = 500;
txb.Text = "item name";
cLeft = cLeft + 1;
return txb;
}
public System.Windows.Forms.Button AddNewButton()
{
System.Windows.Forms.Button btn = new System.Windows.Forms.Button();
this.Controls.Add(btn);
btn.Top = 210;
btn.Left = 500;
btn.Text = "Add item";
btn.Click += (s, e) => { if (string.IsNullOrEmpty(txb.Text)) return;
};
lb.Items.Add(cbTxb.Text);
return btn;
}
除了AddNew
(ListBox|TextBox|Button
)
public System.Windows.Forms.ListBox AddNewListBox()
{
return new System.Windows.Forms.ListBox() {
Location = new Point(500, 74),
parent = this, // instead of this.Controls.Add(...)
};
}
public System.Windows.Forms.TextBox AddNewTextBox()
{
return new System.Windows.Forms.TextBox() {
Location = new Point(500, 180),
Text = "item name",
Parent = this,
};
}
public System.Windows.Forms.Button AddNewButton()
{
return new System.Windows.Forms.Button() {
Location = new Point(500, 210),
Text = "Add item",
Parent = this,
};
}
我建议实现 AddNewControls()
,其中创建的控件可以 交互 :
private void AddNewControls() {
var lb = AddNewListBox();
var txb = AddNewTextBox();
var btn = AddNewButton();
btn.Click += (s, e) => {
// now btn (button) can use txb (TextBox)
if (string.IsNullOrEmpty(txb.Text))
return;
//TODO: put relevant code here
}
cLeft += 3;
//TODO: check lb and cbTxb.Text
lb.Items.Add(cbTxb.Text);
}
然后你可以把
private void cbDd_CheckedChanged(object sender, EventArgs e)
{
AddNewControls();
}