Anfänger
Registriert seit: Apr 2010
Beiträge: 6
Bedankt: 11
|
C# Zeichenprogramm Fehlersuche/Verbesserungen
Hey Leude,
Ich bin noch nicht wirklich sehr weit mit C#, und hab ein Zeichenprogramm geschrieben. Es ist noch nicht fertig, und es gibt endlich viele Verbesserungsstellen und Fehler.
Das Zeichnen hat bis vor kurzem funktioniert, aber dann hab ich die Funktionen "Speichern" und Öffnen hinzugefügt, und jetzt klappts nimmer  Bei jedem beliebigen Grafik.*-Befehl kommt "Object reference not set to an instance of an object." Wäre euch sehr verbunden wenn ihr mal drüberschauen könntet 
LG Freddy
DOWNLOAD
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Zeichnenprogramm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
#region startup
Graphics grafik;
Bitmap pic;
Pen stift = new Pen(Color.Black, 1);
SolidBrush pinsl = new SolidBrush(Color.Black);
DialogResult savemsg;
OpenFileDialog öffnen = new OpenFileDialog();
SaveFileDialog speichern = new SaveFileDialog();
int startX, startY, endeX, endeY;
//int[] VX = new int[n-1];
int werkzeug = 1;
int stiftdicke = 1;
int farbe = 0;
bool full;
bool saved = false;
Color[] farben = { Color.Black, Color.White, Color.Red, Color.Yellow, Color.Green, Color.Blue, Color.Purple, Color.Orange };
private void Form1_Load(object sender, EventArgs e)
{
pic = new Bitmap(pictureBox1.Image);
grafik = Graphics.FromImage(pic);
}
#endregion
#region datei
private void neuToolStripMenuItem_Click(object sender, EventArgs e)
{
if (!saved)
{
savemsg = MessageBox.Show("Soll die Datei gespeichert werden?", "Speichern?", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
if (savemsg == DialogResult.Yes)
Speichern();
if (savemsg == DialogResult.No)
grafik.Clear(pictureBox1.BackColor);
}
}
private void beendenToolStripMenuItem_Click(object sender, EventArgs e)
{
if (!saved)
{
savemsg = MessageBox.Show("Speichern?", "Soll die Datei vor dem Beenden gespeichert werden?", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
if (savemsg == DialogResult.Yes)
{
Speichern();
this.Close();
}
if (savemsg == DialogResult.No)
this.Close();
}
}
private void speichernToolStripMenuItem_Click(object sender, EventArgs e)
{
Speichern();
}
private void Speichern()
{
speichern.InitialDirectory = "Desktop";
speichern.Title = "Bild speichern";
if (speichern.ShowDialog() == DialogResult.OK)
{
System.IO.FileStream pfad = (System.IO.FileStream)speichern.OpenFile();
pic.Save(pfad, System.Drawing.Imaging.ImageFormat.Tiff);
pic.Dispose();
}
}
private void öffnenToolStripMenuItem_Click(object sender, EventArgs e)
{
öffnen.InitialDirectory = "Desktop";
öffnen.Filter = "TIFF-Bilder (*.tiff) | *.tif; *.tiff";
öffnen.Title = "Bild öffnen";
if (öffnen.ShowDialog() == DialogResult.OK)
{
Bitmap.FromFile(öffnen.FileName);
pictureBox1.Image = pic;
grafik.Save();
grafik.Dispose();
}
}
#endregion
#region zeichnen
private void LinieZeichnen()
{
stift.Color = farben[farbe];
stift.Width = stiftdicke;
pinsl.Color = farben[farbe];
grafik.DrawLine(stift, startX, startY, endeX, endeY);
}
private void QuadratZeichnen()
{
if (full)
{
pinsl.Color = farben[farbe];
if (startX < endeX && startY < endeY)
{
grafik.FillRectangle(pinsl, startX, startY, endeX - startX, endeY - startY);
}
else if (startX < endeX && startY > endeY)
{
grafik.FillRectangle(pinsl, startX, endeY, endeX - startX, startY - endeY);
}
else if (startX > endeX && startY > endeY)
{
grafik.FillRectangle(pinsl, endeX, endeY, startX - endeX, startY - endeY);
}
else if (startX > endeX && startY < endeY)
{
grafik.FillRectangle(pinsl, endeX, startY, startX - endeX, endeY - startY);
}
}
else
{
stift.Color = farben[farbe];
stift.Width = stiftdicke;
if (startX < endeX && startY < endeY)
{
grafik.DrawRectangle(stift, startX, startY, endeX - startX, endeY - startY);
}
else if (startX < endeX && startY > endeY)
{
grafik.DrawRectangle(stift, startX, endeY, endeX - startX, startY - endeY);
}
else if (startX > endeX && startY > endeY)
{
grafik.DrawRectangle(stift, endeX, endeY, startX - endeX, startY - endeY);
}
else if (startX > endeX && startY < endeY)
{
grafik.DrawRectangle(stift, endeX, startY, startX - endeX, endeY - startY);
}
}
}
private void KreisZeichnen()
{
if (full)
{
pinsl.Color = farben[farbe];
grafik.FillEllipse(pinsl, startX, startY, endeX - startX, endeY - startY);
}
else
{
stift.Color = farben[farbe];
stift.Width = stiftdicke;
grafik.DrawEllipse(stift, startX, startY, endeX - startX, endeY - startY);
}
}
private void VieleckZeichnen()
{
//mal schaun...
}
#endregion
}
}
Das Design:
|