wxy新人小白 2019-08-29 11:32 采纳率: 27.8%
浏览 1817
已采纳

在C#中如何解决未将对象引用设置到对象的实例。

想达到的效果:主窗口上面是一个容器panel,里面有3个下拉框,左边是一个toolStrip菜单栏,剩余部分是一个panel1(用来显示五个子窗口),如第一个图;按完第一个按钮,在主窗口的panel1上显示第一个子窗口(Win1)的内容,效果如图二;
下面是主窗口用的部分程序

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
            w1.WindowState = FormWindowState.Maximized;
            this.panel1.Controls.Add(w1);  // 添加w1窗体
            //w1.Show(this);
            w1.Show();
            flag = true;
        }
                 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();
        }

启动时在string a = ((Form1)this.Owner).comboBox1.Text;处显示其他信息: 未将对象引用设置到对象的实例。
若将去掉this.panel1.Controls.Add(w1),w1.TopLevel = true,启动时Win就出现在电脑下面的任务栏里了。
我想至始至终任务栏里就一个主窗口,应该怎么改
图片说明图片说明

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-08-29 23:33
    关注

    w1.Show(this);才能使用 Owner

    你那样不能,可以借助Application.OpenForms["Fomr1"]访问窗体。

    另外,请加群

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 带序列特征的多输出预测模型
  • ¥15 VB.NET读取电脑主板序列号
  • ¥15 Python 如何安装 distutils模块
  • ¥15 关于#网络#的问题:网络是从楼上引一根网线下来,接了2台傻瓜交换机,也更换了ip还是不行
  • ¥15 资源泄露软件闪退怎么解决?
  • ¥15 CCF-CSP 2023 第三题 解压缩(50%)
  • ¥30 comfyui openpose报错
  • ¥20 Wpf Datarid单元格闪烁效果的实现
  • ¥15 图像分割、图像边缘提取
  • ¥15 sqlserver执行存储过程报错