Einzelnen Beitrag anzeigen

dragi

Registriert seit: 22. Jul 2003
198 Beiträge
 
Delphi 2005 Personal
 
#5

Re: [c#] Auf objektevon anderen Formularen zugreifen?!

  Alt 26. Jan 2006, 14:46
Ich habe das Objekt einfach so erzeugt:

Code:
DB MyDBClass = new DB();
Aber irgendwie ist mir das alles gerade zu hoch und ich versuche es ohne klasse auch wenn es total unsauber ist. Aber da kommt auch schon die nächste Frage:

In meiner MainForm will ich nun im Form.Load die Connection zur DB herstellen. Also habe ich diese public und static generiert. In meinem UserControl will ich nun die Connection meinem SQLCommand zuweisen bekomme aber eine NullReferencException. Das ist mir total unklar. Ich habe doch das Connection Objekt erzeugt warum kann ich es nciht nutzen?

MainForm:

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Text;
using System.Windows.Forms;

namespace Zeiterfassung
{
    public partial class MainForm : Form
    {

        private TimeCollect tCol;
        private employee emplo;
        private projects proj;
        public SqlConnection con;

        public MainForm()
        {
            InitializeComponent();
            SetStyle(ControlStyles.DoubleBuffer, true);
        }

        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            Rectangle rect = new Rectangle(0, 0, Width, 20);
            Brush Brush1 = new LinearGradientBrush(rect, Color.FromArgb(255, 255, 155), Color.FromArgb(255, 168, 82), LinearGradientMode.Vertical);
            g.FillRectangle(Brush1, rect);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            button3.Image = Resource1.arrow_down_16;
            groupBox1.Visible = false;
            button1_Click(this, null);
            con = new SqlConnection();
            con.ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=\"D:\\Zeiterfassung\\Zeiterfassung\\TimeDB.mdf\";Integrated Security=True;Connect Timeout=30;User Instance=True";
            try
            {
                con.Open();
            }
            catch (Exception MyException)
            {
                MessageBox.Show(MyException.ToString());
            }
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            splitContainer1.Panel2.Controls.Clear();
            con.Close();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            DateTime dt = new DateTime();
            dt = DateTime.Now;
            label2.Text = dt.ToLongTimeString();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (tCol == null)
            {
                splitContainer1.Panel2.Controls.Clear();
                emplo = null;
                proj = null;
                tCol = new TimeCollect();
                tCol.Dock = DockStyle.Fill;
                splitContainer1.Panel2.Controls.Add(tCol);
                tCol.Show();
            }
        }

        private void button5_Click(object sender, EventArgs e)
        {
            if (emplo == null)
            {
                splitContainer1.Panel2.Controls.Clear();
                tCol = null;
                proj = null;
                emplo = new employee();
                emplo.Dock = DockStyle.Fill;
                splitContainer1.Panel2.Controls.Add(emplo);
                emplo.Show();
            }
        }

        private void button7_Click(object sender, EventArgs e)
        {
            if (proj == null)
            {
                splitContainer1.Panel2.Controls.Clear();
                tCol = null;
                emplo = null;
                proj = new projects();
                proj.Dock = DockStyle.Fill;
                splitContainer1.Panel2.Controls.Add(proj);
                proj.Show();
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            if (groupBox1.Visible == false)
            {
                groupBox1.Visible = true;
                button3.Image = Resource1.arrow_up_16;
            }
            else
            {
                groupBox1.Visible = false;
                button3.Image = Resource1.arrow_down_16;
                button1.PerformClick();
            }
        }

        private void panel2_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            Rectangle rect = new Rectangle(0, 0, Width, Height);
            Brush Brush1 = new LinearGradientBrush(rect, Color.White, Color.Black, LinearGradientMode.Vertical);
            g.FillRectangle(Brush1, rect);
        }
    }
}
UserControl:
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.Windows.Forms;

namespace Zeiterfassung
{
    public partial class employee : UserControl
    {
        public int SaveFlag;
        public SqlDataReader dr = null;
        public SqlCommand cmd = null;

        public employee()
        {
            InitializeComponent();
        }

        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            Rectangle rect = new Rectangle(0, 0, Width, 20);
            Brush Brush1 = new LinearGradientBrush(rect, Color.FromArgb(90, 135, 215), Color.FromArgb(7, 59, 148), LinearGradientMode.Vertical);
            g.FillRectangle(Brush1, rect);
        }

        private void employee_Load(object sender, EventArgs e)
        {
            cmd.Connection = MainForm.con;   <----------Hier kommt die Exception!!!
            cmd.CommandText = "SELECT * FROM employee";
            cmd.ExecuteReader();
        }

        private void panel3_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            Rectangle rect = new Rectangle(0, 0, Width, Height);
            Brush Brush1 = new LinearGradientBrush(rect, Color.FromArgb(181, 207, 248), Color.Blue, LinearGradientMode.Vertical);
            g.FillRectangle(Brush1, rect);
        }

    }
}
Es ist doch sicherlich unsauber immer ene Connection zu einer DB aufzubauen und wieder zu schliessen. Die lässt man doch solange das Programm läuft auf, oder?
Delphi 3 Professional @home
Delphi 2005 PE @home
Delphi 2005 Enterprise @work
  Mit Zitat antworten Zitat