请教关于动态添加删除组合框并合并文档功能的实现问题

yyada 2013-05-09 01:09:05
我想实现一个根据需要动态添加删除ComboBox控件,并将生成的ComboBox控件中选中的内容全部添加到1个richTextBox中,以下是代码部分
       
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.Sql;
using System.Data.SqlClient;

namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
string str;
string cbbname;
private int i = 0;
ComboBox cbb;
public Form2()
{
InitializeComponent();
}
//button1为动态添加ComboBox键
private void button1_Click(object sender, EventArgs e)
{
i++;

cbb = new ComboBox();
cbb.Name = "cbb" + i;
cbb.Location = new System.Drawing.Point(90, i * 30);
cbb.Size = new System.Drawing.Size(120, 21);


SqlConnection conn = new SqlConnection(Properties.Settings.Default.测试专用ConnectionString);
conn.Open();
string str = "select DeptName from Table_1";
SqlCommand cmd = new SqlCommand(str, conn);
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
cbb.Items.Add(reader["DeptName"]);
}
reader.Close();
conn.Close();
this.Controls.Add(cbb);
//添加一个触发一次button3,不知道对不对?
cbb.SelectedIndexChanged += new EventHandler(button3_Click);

}
//链接“测试专用”数据库
private void Form2_Load(object sender, EventArgs e)
{
try
{
SqlConnection conn = new SqlConnection(Properties.Settings.Default.测试专用ConnectionString);
conn.Open();
string str = "select DeptName from Table_1";
SqlCommand cmd = new SqlCommand(str, conn);
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
this.comboBox1.Items.Add(reader["DeptName"]);
}
reader.Close();
conn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
//将所有comboBox中的选中内容合并到richTextBox中
private void button3_Click(object sender, EventArgs e)
{


if (i == 0)
{
richTextBox1.Text = comboBox1.Text;
}
else
{
foreach (Control c in this.Controls)
{
if (c is ComboBox)
{
ComboBox cbb = (ComboBox)c;
cbbname = ("cbb" + i).ToString();
if (cbb.Name.ToString() == cbbname.ToString())
{
i--;
//this.Controls.Remove(c);
str += "," + cbb.Text;
richTextBox1.Text = comboBox1.Text + str;
}
}
}

}


}
//删除键:实现逐一删除ComboBox控件
private void button4_Click(object sender, EventArgs e)
{
foreach(Control c in this.Controls)
{
if (c is ComboBox)
{
ComboBox cbb = (ComboBox)c;
cbbname = ("cbb" + i).ToString();
if (cbb.Name.ToString() == cbbname.ToString())
{
i--;
this.Controls.Remove(c);
}
}
}

}


}
}



问题:
1.若按顺序可以实现加2个ComboBox,选择后内容(eg:第一个A,第二个B,而本来存在的comboBox1的内容为B)后,richtextbox1可以显示B,A,B,但是若我将comboBox1的内容改为C的时候,按button3时richtextbox1无法实现同步更改为C,A,B即无法同步更改,另外这时候按删除键,删除的却是生成的第二个comboBox的内容(第二个comboBox的内容A变为空了),而richtextbox1也没有改变
具体的这个程序是漏洞百出啊,我就是想实现根据需要动态加comboBox,而richtextbox的内容随comboBox的内容、comboBox的增加等操作同时改变,本人是新手请各位大神多多指教!~~求C#代码,谢谢!~~
...全文
121 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyada 2013-05-14
  • 打赏
  • 举报
回复
引用 4 楼 u010689260 的回复:
删除键就可以每次删掉最后一个,其他的没听懂你说的

ArrayList array = new ArrayList();
在button1中加句:
            [code=csharp]array.Add(cbb.Text);
            cbb.TextChanged += cbb_TextChanged;
然后
void cbb_TextChanged(object sender, EventArgs e)
        {
            foreach (Control text in this.Controls)
            {
                if (text is ComboBox)
                {
                    ComboBox coo = (ComboBox)text;
                    if (coo.Focused)
                    {
                        index = coo.TabIndex;
                        array.RemoveAt((index - 6));
                        array.Insert((index - 6), coo.Text);
                        //MessageBox.Show(aaa.ToString());
                    }
                }
            }         
            //throw new NotImplementedException();
        }
//删除键: private void button4_Click(object sender, EventArgs e) { if (i == 0) MessageBox.Show("已经无法删除了"); cbbname = ("cbb" + i).ToString();//剩下的最后一个创建的combobox控件的名称 //按照控制顺序来删除combobox foreach (Control c in this.Controls) { if (c is ComboBox) { ComboBox cbb = (ComboBox)c; //当前选择的combobox控件 if (cbb.Name.ToString() == cbbname.ToString()) { int ee = i-1; i--; array.RemoveAt(ee); this.Controls.Remove(c); } } } } [/code]
谢谢!
u010689260 2013-05-14
  • 打赏
  • 举报
回复
删除键就可以每次删掉最后一个,其他的没听懂你说的

ArrayList array = new ArrayList();
在button1中加句:
            [code=csharp]array.Add(cbb.Text);
            cbb.TextChanged += cbb_TextChanged;
然后
void cbb_TextChanged(object sender, EventArgs e)
        {
            foreach (Control text in this.Controls)
            {
                if (text is ComboBox)
                {
                    ComboBox coo = (ComboBox)text;
                    if (coo.Focused)
                    {
                        index = coo.TabIndex;
                        array.RemoveAt((index - 6));
                        array.Insert((index - 6), coo.Text);
                        //MessageBox.Show(aaa.ToString());
                    }
                }
            }         
            //throw new NotImplementedException();
        }
//删除键: private void button4_Click(object sender, EventArgs e) { if (i == 0) MessageBox.Show("已经无法删除了"); cbbname = ("cbb" + i).ToString();//剩下的最后一个创建的combobox控件的名称 //按照控制顺序来删除combobox foreach (Control c in this.Controls) { if (c is ComboBox) { ComboBox cbb = (ComboBox)c; //当前选择的combobox控件 if (cbb.Name.ToString() == cbbname.ToString()) { int ee = i-1; i--; array.RemoveAt(ee); this.Controls.Remove(c); } } } } [/code]
yyada 2013-05-09
  • 打赏
  • 举报
回复
新手,请各位大神帮忙。。。。
aa659401538 2013-05-09
  • 打赏
  • 举报
回复
学习 版主删我贴了

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧