2013-03-14 6 views
0

У меня есть этот пользовательский элемент управления пользовательского кода управления является GraphChart:Как передать переменные form1 в пользовательский класс управления?

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Drawing; 
using System.Data; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Web; 
using System.Windows.Forms.DataVisualization.Charting; 

namespace GatherLinks 
{ 

    public partial class GraphChart : UserControl 
    { 
     Form1 form1; 

     public GraphChart(Form1 f1) 
     { 
      InitializeComponent(); 

      form1 = f1; 

     } 

     private void GraphChart_Load(object sender, EventArgs e) 
     { 
      chart1.Series.Clear(); 
      var series1 = new System.Windows.Forms.DataVisualization.Charting.Series 
      { 
       Name = "Series1", 
       Color = System.Drawing.Color.Green, 
       IsVisibleInLegend = false, 
       IsXValueIndexed = true, 
       ChartType = SeriesChartType.Line 
      }; 

      this.chart1.Series.Add(series1); 

      //for (int i = 0; i < 100; i++) 
      //{ 
       series1.Points.AddXY(form1.axisX, form1.axisY); 
      //} 
      chart1.Invalidate(); 
     } 

После добавления form1 и f1 переменных им получать сообщение об ошибке:

Ошибка 2 GatherLinks.GraphChart»не содержит конструктор, который принимает аргументы 0

Когда я сделать двойной щелчок по ошибке он движется к Form1 дизайнера сСт линии:

this.graphChart1 = new GatherLinks.GraphChart(); 

Я попытался установить Form1 между символами(), но он не работает, получив ошибку. Как я могу это решить?

EDIT:

Я только что сделал в коде управления пользователя:

public partial class GraphChart : UserControl 
    { 
     Form1 form1; 

     public GraphChart() { } 
     public GraphChart(Form1 f1) 
     { 
      InitializeComponent(); 

      form1 = f1; 

     } 

Но теперь в Form1 конструктора У меня есть эти строки:

this.graphChart1.chart1.MouseMove += chart1_MouseMove; 
this.graphChart1.chart1.MouseLeave += chart1_MouseLeave; 

Они работали до того хорошо, но как только как я добавил строку: public GraphChart() {} Im получение ошибки при запуске приложения, что chart1 является нулевым.

+0

Можете ли вы показать не работает синтаксис? – Fendy

+0

Fendy, когда я добавил form1 и f1 в код User Control, возникла ошибка. Синтаксиса не работает. Мне просто нужно передать Form1 в GraphChart, но я не могу этого сделать. – user2065612

+0

Что такое пространство имен, которое вы используете для своего Form1 –

ответ

1

Ваша первая проблема, что ваш UserControl не имеет ни малейшего представления о Form1 типа является. Вам нужно поставить оператор using в верхней части вашего файла, чтобы включить ваше пространство имен форм. В моем случае я протестировал с WindowsFormApplication1, хотя это будет то, что когда-либо использовало пространство имен. И в вашем обновленном примере вы никогда не вызываете свой метод InitializeComponent, чтобы никогда не создавать свою диаграмму.

Вы можете попробовать что-то вроде этого, если вы хотите использовать конструктор без параметров: (сведению добавление метода InitializeComponent к конструктору по умолчанию и добавлению двух дополнительных методов SetupGraph и SetForm я также переместил код из ряда GraphChart_Load EventHandler к SetupGraph метода. Это работает как с прохождением Form1 в конструкторе и используя конструктор без параметров до тех пор, пока вы используете SetForm перед вызовом SetupGraph)

UserControl

public partial class GraphChart : UserControl 
{ 
    private Chart chart1; 
    Form1 form1; 
    public GraphChart() 
    { 
     InitializeComponent(); 
    } 
    public GraphChart(Form1 f1) 
    { 
     InitializeComponent(); 
     form1 = f1; 
     this.Load+=new EventHandler(GraphChart_Load); 
    } 
    public void SetForm(Form1 f1) 
    { 
     form1 = f1; 
    } 
    public void SetupGraph() 
    { 
     chart1.Series.Clear(); 
     var series1 = new System.Windows.Forms.DataVisualization.Charting.Series 
     { 
      Name = "Series1", 
      Color = System.Drawing.Color.Green, 
      IsVisibleInLegend = false, 
      IsXValueIndexed = true, 
      ChartType = SeriesChartType.Line 
     }; 

     this.chart1.Series.Add(series1); 

     //for (int i = 0; i < 100; i++) 
     //{ 
     series1.Points.AddXY(form1.axisX, form1.axisY); 
     //} 
     chart1.Invalidate(); 
    } 
    private void GraphChart_Load(object sender, EventArgs e) 
    { 
     SetupGraph(); 
    } 

    private void InitializeComponent() 
    { 
     System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); 
     System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend(); 
     System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series(); 
     this.chart1 = new System.Windows.Forms.DataVisualization.Charting.Chart(); 
     ((System.ComponentModel.ISupportInitialize)(this.chart1)).BeginInit(); 
     this.SuspendLayout(); 
     // 
     // chart1 
     // 
     chartArea1.Name = "ChartArea1"; 
     this.chart1.ChartAreas.Add(chartArea1); 
     legend1.Name = "Legend1"; 
     this.chart1.Legends.Add(legend1); 
     this.chart1.Location = new System.Drawing.Point(0, 0); 
     this.chart1.Name = "chart1"; 
     series1.ChartArea = "ChartArea1"; 
     series1.Legend = "Legend1"; 
     series1.Name = "Series1"; 
     this.chart1.Series.Add(series1); 
     this.chart1.Size = new System.Drawing.Size(519, 473); 
     this.chart1.TabIndex = 0; 
     this.chart1.Text = "chart1"; 
     // 
     // GraphChart 
     // 
     this.Controls.Add(this.chart1); 
     this.Name = "GraphChart"; 
     ((System.ComponentModel.ISupportInitialize)(this.chart1)).EndInit(); 
     this.ResumeLayout(false); 

    } 
} 

Form1

public partial class Form1 : Form 
{ 
    public int axisX = 100; 
    public int axisY = 100; 
    GatherLinks.GraphChart graphChart1; 

    public Form1() 
    { 
     InitializeComponent(); 

    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     graphChart1 = new GatherLinks.GraphChart(); 
     this.Controls.Add(graphChart1); 
     graphChart1.SetForm(this); 
     graphChart1.SetupGraph(); 
    } 

} 
0

Вы должны дать конструктор, который принимает 0 аргументов в классе, так что попробуйте добавить следующую строку в класс GraphChart:

public GraphChart(){} 
+0

Терри Я сделал это, посмотрел на мой вопрос, обновляя его сейчас, эта ошибка исчезла, но у меня возникла другая проблема. – user2065612