wxy新人小白 2019-08-27 13:56 采纳率: 31.3%
浏览 585
已采纳

在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条回答 默认 最新

  • threenewbee 2019-08-27 14:10
    关注

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

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

    .comboBox1要定义成public的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 docker模式webrtc-streamer 无法播放公网rtsp
  • ¥15 学不会递归,理解不了汉诺塔参数变化
  • ¥15 基于图神经网络的COVID-19药物筛选研究
  • ¥30 软件自定义无线电该怎样使用
  • ¥15 R语言mediation包做中介分析,直接效应和间接效应都很小,为什么?
  • ¥15 Jenkins+k8s部署slave节点offline
  • ¥15 如何实现从tello无人机上获取实时传输的视频流,然后将获取的视频通过yolov5进行检测
  • ¥15 WPF使用Canvas绘制矢量图问题
  • ¥15 用三极管设计一个单管共射放大电路
  • ¥15 孟德尔随机化r语言运行问题