我在Windows窗体应用程序中遇到以下问题。我有两种形式:使用TreeView的CategoryTree.cs形式和内部带有DataGridView的ProjectForm.cs。我想用TreeView节点文本填充DataGridViewComboBoxColumn Collection,例如我的树看起来像这样:
Science Fiction
Movie1
Movie2
Horror
Movie1
Movie2
Action
Movie1
Movie2
等等。我希望这些类别是ComboBoxColumn中的项目。我的代码在CategoryTree表单中如下所示
public partial class CategoryTree : Form
{
//adding nodes to the tree
private void button2_Click(object sender, EventArgs e)
{
TreeNode newone = new TreeNode();
newone.ForeColor = Color.Orange;
newone.NodeFont = new Font(catTreeView.Font, FontStyle.Bold);
newone.Text = nameBox.Text;
catTreeView.Nodes.Add(newone);
//and code for adding child and grandchild and ...
}
//other stuff
}
在DataGridView中我有以下方法
public void AddComboBox()
{
int i;
CategoryTree cat_Form = new CategoryTree();
//Set the cat_Form Active
cat_Form = ActiveForm as CategoryTree;
if (cat_Form != null)
{
i = cat_Form.catTreeView.Nodes.Count; //here i get exception
if(i != 0)
{
var newone2 = new DataGridViewComboBoxColumn();
newone2.HeaderText = "Main category";
newone2.Name = "ColNr_" + nofCols;
string comboTxt;
for(int j=0; j<i; j++){
comboTxt = catTreeView.Nodes[j].Text;
newone2.Items.Add(comboTxt);
}
mainProjectGrid.Columns.Add(newone2);
nofCols += 1;
}
}
}
不幸的是,这段代码生成了System.NullReferenceException&#39;。 catTreeView修饰符设置为&#39; public&#39;。我有很多不同的方法解决这个问题,但没有一个能够解决问题。
正如您可能看到我的问题所在 - 如何从ProjectForm表单中获取catTreeView对象并填充组合框?
我是绝对的初学者,所以我总是很感激使用示例代码的答案。
答案 0 :(得分:0)
可能引起关注的人。我找到了解决这个问题的方法。在TreeView中,我添加了一个以这种方式编程的按钮
private void applyBtn_Click(object sender, EventArgs e)
{
ProjectForm newProject1 = new ProjectForm( catTreeView );
newProject1.MdiParent = this.ParentForm;
newProject1.Text = "blabla";
newProject1.Show();
}
接下来,我将其添加到ProjectForm.cs
public ProjectForm(TreeView catView)
{
InitializeComponent();
holalala = catView;
}
public void AddComboBox()
{
int i;
if (holalala != null)
{
i = holalala.Nodes.Count;
if (i != 0)
{
var newone2 = new DataGridViewComboBoxColumn();
newone2.HeaderText = "Main category";
newone2.Name = "ColNr_" + nofCols;
string comboTxt;
for (int j = 0; j < i; j++)
{
comboTxt = holalala.Nodes[j].Text;
newone2.Items.Add(comboTxt);
}
mainProjectGrid.Columns.Add(newone2);
nofCols += 1;
}
}
}
此解决方案非常简单,工作正常。我想我现在可以添加几行不仅可以添加列,还可以使用可能出现在TreeView中的新节点更新它们。我将在稍后处理:)。