在C#中用主窗口的控件控制子窗口的控件,子窗口(Win1)访问主窗口(Form1)的控件

用下面的方法,实现在主窗口按完toolStripButton1,子窗口在主窗口的panel1显示(为了使每个子窗口显示时,左边和上边都有主窗口的菜单栏)

 Win1 w1; w1 = new Win1();
  private void toolStripButton1_Click(object sender, EventArgs e)
        {
            this.panel1.Controls.Clear();  // 清空原有的控件
            w1.TopLevel = false;  // 非顶级窗口
            w1.FormBorderStyle = FormBorderStyle.None;  // 不显示标题栏
            w1.Dock = System.Windows.Forms.DockStyle.Fill;  // 填充panel
            this.panel1.Controls.Add(w1);  // 添加w1窗体
            w1.Show();
        }
                 private void button1_Click(object sender, EventArgs e)
        {
            if (flag == true && flag1 == true && flag2 == true)
            {
                w1.Creatchart1();

            }
        }

下面是子窗口Win1的其中的一个chart的程序

            private void Creatchart1()
        {
            string a = ((Form1)this.Owner).comboBox1.Text;
            string b = ((Form1)this.Owner).comboBox2.Text;
            string c = ((Form1)this.Owner).comboBox3.Text;
            string wax = a + b + c;
            string dbPath = @"D:\历年高考分数.db";
            string sq = @"Data Source=" + dbPath;
            m = new SQLiteConnection(sq);
            m.Open();
            SQLiteDataAdapter mAdapter = new SQLiteDataAdapter("select " + wax + ",yxlc from 表2", m);
            DataSet ds = new DataSet();
            mAdapter.Fill(ds);
            DataTable dt = ds.Tables[0];
            Series Series1 = new Series();
            chart1.DataSource = dt;
            Series1.IsValueShownAsLabel = false;//是否显示图例
            chart1.Series.Add(Series1);
            chart1.Series["Series1"].ChartType = SeriesChartType.Spline;//形状
            chart1.Series[0].XValueMember = "yxlc";//X轴数据成员列
            chart1.Series[0].YValueMembers = wax;
            chart1.Series[0].IsValueShownAsLabel = true;//显示坐标
            chart1.DataBind();
            chart1.BringToFront();
            m.Close();
        }

w1.TopLevel = false; 这里改成true时,显示顶级子窗口不能添加到容器控件里
程序启动时this.panel1.Controls.Add(w1); // 添加w1窗体这里显示:非顶级窗体不能显示为模式对话框。在调用 Show 之前应从所有父窗体中移除该窗体。

2个回答

w1.Show();
->
w1.Show(this);

string a = ((Form1)ths.Owner).comboBox1.Text;

.comboBox1要定义成public的

weixin_44138934
wxy新人小白 https://blog.csdn.net/IllegalName/article/details/65444249我参考的,w1是窗体
9 个月之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 w1是什么?不能把a窗体的控件添加到b窗体上
9 个月之前 回复
weixin_44138934
wxy新人小白 this.panel1.Controls.Add(w1);这里显示非顶级窗体不能显示为模式对话框。在调用 Show 之前应从所有父窗体中移除该窗体。并且主窗口调用Win1的Creatchart1()时,string a = ((Form1)this.Owner).comboBox1.Text;中的this无效
9 个月之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复weixin_44138934: modifier属性,可以设置的
9 个月之前 回复
weixin_44138934
wxy新人小白 另外,启动时会显示其他信息: 非顶级窗体不能显示为模式对话框。在调用 Show 之前应从所有父窗体中移除该窗体。
9 个月之前 回复
weixin_44138934
wxy新人小白 comboBox1要定义成public的直接在属性上改好,还是用代码改好,代码的话public String combobox1 { get { return this.combobox1.Text; } set { this.combobox1.Text = value; } }是吗
9 个月之前 回复
weixin_44138934
wxy新人小白 ->这是什么意思
9 个月之前 回复

这个你可以将comboBox1这个控件的属性改成public 默认是私有private的。或者你也可以通过构造函数传到你要的form中。或者委托传值也行。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐