创建使用C#中的名称
我可能要对这个错误的方式,所以我设置了完整的方案字符串对象...创建使用C#中的名称
我有一个DataTable持有多个项目 - 像股票项目。该表中的数据可能会发生变化,但它会从数据库填充,因此它是一个不同的列表。我希望用户能够选择它们中的一些,并且我想通过为DataTable中的每个项目创建一个新的CheckBox对象来实现这一点。
到目前为止,我有以下(我知道是错的,但说明了什么,我想要知道的!):
string cbName = "cbNewTest";
int cbPosition = 24;
int cbTab = 1;
foreach (DataRow row in tblAllTests.Rows)
{
string cbNewName = cbName + cbTab.ToString();
this.(cbNewName) = new System.Windows.Forms.CheckBox();
this.testInfoSplitContainer.Panel2.Controls.Add(this.(cbNewName));
this.(cbNewName).AutoSize = true;
this.(cbNewName).Location = new System.Drawing.Point(6, cbPosition);
this.(cbNewName).Name = cbNewName;
this.(cbNewName).Size = new System.Drawing.Size(15, 14);
this.(cbNewName).TabIndex = cbTab;
this.(cbNewName).Text = row["itemDesc"].ToString();
cbPosition = cbPosition + 22;
cbTab = cbTab + 1;
}
所以当然问题是在括号中的东西。基本上,我想这是任何在我的字符串'cbNewName',但我真的不知道如何做到这一点...我习惯于SQL,因为我是一个数据库加仑,所以这可能意味着我已经编码这一切都是错误的...
任何帮助将非常赞赏......我是非常新的C#(或者对于这一点,任何编程数据库之外的编程)如此简单的条款将不胜感激!
您可以创建一个CheckBox
作为变量,就像其他任何东西一样。没有必要把它分配给Form
的属性,这是不可能的一个生成动态不管:
CheckBox newCheckBox = new CheckBox();
// (Initialize your new CheckBox here, basically exactly as you're
// already doing except instead of this.(cbNewName) you use newCheckBox)
this.testInfoSplitContainer.Panel2.Controls.Add(newCheckBox);
如果以后需要访问它,因为你已经设置的名称,只是做:
(CheckBox)this.testInfoSplitContainer.Panel2.Controls["theName"]
工作完美,谢谢! – Elatesummer 2011-12-21 20:01:41
只需创建一个复选框词典:
var mycbs = new Dictionary<string,<System.Windows.Forms.CheckBox>>();
foreach (DataRow row in tblAllTests.Rows)
{
string cbNewName = cbName + cbTab.ToString();
mycbs[cbNewName] = new System.Windows.Forms.CheckBox();
this.testInfoSplitContainer.Panel2.Controls.Add(mycbs[cbNewName]);
mycbs[cbNewName].AutoSize = true;
mycbs[cbNewName].Location = new System.Drawing.Point(6, cbPosition);
mycbs[cbNewName].Name = cbNewName;
mycbs[cbNewName].Size = new System.Drawing.Size(15, 14);
mycbs[cbNewName].TabIndex = cbTab;
mycbs[cbNewName].Text = row["itemDesc"].ToString();
cbPosition = cbPosition + 22;
cbTab = cbTab + 1;
}
谢谢你 - 我已经和前面的答案一起工作了,但我也会用这个方法来看看哪种方法最适合我 – Elatesummer 2011-12-21 20:05:53
您可以创建一个复选框对象,并设置像
的复选框的名称CheckBox c = new CheckBox();
c.Name = "CheckBoxName";
,当你需要访问此复选框,然后你可以使用名称,如区分:
// Loop through all controls
foreach (Control tempCtrl in this.Controls)
{
// Determine whether the control is CheckBoxName,
// and if it is, do what ever you want
if (tempCtrl.Name == "CheckBoxName")
{
// ...
}
}
我不能完全肯定我理解你的问题,但如果你的目的是1 )为面板添加一个新的复选框控件,并2)保留对新控制对象的引用,您可以根据字符串值稍后查找该对象。如果这是正确的,那么:
-
添加字典到您的类,是这样的:使用System.Collections.Generic
;使用System.Windows.Forms的 ; IDictionary checkboxes = new Dictionary();这是一个新的字典()。
-
创建您的新复选框并将其指定为普通变量:
CheckBox cb = new CheckBox(); this.testInfoSplitContainer.Panel2.Controls.Add(cb); cb.AutoSize = true; //等等...
-
商店中的参考在字典中的变量,像这样:
锁(((System.Collections.ICollection)复选框).SyncRoot) { 复选框[cbNewName] = CB; }
清除表单中被覆盖的字典Dispose方法,例如,,
checkboxes.Clear()
。
什么是目标平台? Silverlight的? asp.net? WPF?的WinForms? (等)有效答案需要此信息 – 2011-12-21 19:50:44
道歉 - windows窗体应用程序... – Elatesummer 2011-12-21 19:51:20