Laden...

Forenbeiträge von Kabaal Ingesamt 64 Beiträge

14.02.2005 - 17:14 Uhr

Super, danke herbivore!
Das war genau der Denkanstoß den ich gebraucht habe.
Es ist tatsächlich so, das der PageSetupDialog alle Randmaße in mm annimmt, sie dann aber in Zoll zurückgibt. Wenn der Dialog geschlossen wurde muß man die Maße einfach umrechnen.
Ich hab das so gemacht:


internal void SeiteEinrichten() {
	PageSetupDialog dlg = new PageSetupDialog();
	dlg.Document = objPrintDocument;
	if(dlg.ShowDialog() == DialogResult.OK)
	objPrintDocument.DefaultPageSettings.Margins =
		PrinterUnitConvert.Convert(objPrintDocument.DefaultPageSettings.Margins,
	                               PrinterUnit.Display,
	                               PrinterUnit.TenthsOfAMillimeter);
}

In der .NET Docu ist das irgendwie nich gut beschrieben.
Danke noch mal.
Gruß ... Kabaal.

13.02.2005 - 22:11 Uhr

Tachchen.
Ich habe hier einen PageSetupDialog. Die Einstellungen übernehme ich in ein globales PrintDocument.


internal void SeiteEinrichten() {
	PageSetupDialog dlg = new PageSetupDialog();
	dlg.Document = objPrintDocument;
	dlg.ShowDialog();
}

Wenn ich zur Laufzeit diesen Dialog aufrufe sind die Seitenränder per Default auf 10 mm gesetzt. Ich klicke ohne Änderung auf OK. Wenn ich nun den Dialog zum zweiten mal aufrufe sind die Ränder alle auf 3.9 mm eingestellt. Beim dritten mal auf 1.5 u.s.w.
Ich habs auch schon mal damit probiert, die Einstellungen nicht in ein PrintDocument- sondern in ein PageSettings- Objekt zu speichern. - Mit dem selben Ergebnis.
Kann mir jemand helfen?

13.02.2005 - 11:56 Uhr

Langsam dämmerts mir.
Ich glaub ich hab die Patterns "zu wörlich" genommen. Jetzt ließt sich das Buch auch gleich ganz anders. 😁

10.02.2005 - 21:02 Uhr

Naja, mit "umständlich und sinnlos" meine ich folgendes:

Wenn ich die "ArrayList- Lösung" nehme siehts ganz ok aus, ist aber igendwie nicht
so C#- like.

Wenn ich die "Events- Lösung" nehme scheint mir der einsatz von abstracten Beobachter- und Subjekt klassen etwas umständlich, da ich die Events ja auch gleich in die konkreten objekte einbauen kann.


	public delegate void GeändertEventHandler();
	
	abstract public class Subjekt {
		abstract public event GeändertEventHandler Geändert;
	}
	
	public class KonkretesSubjekt : Subjekt {
		byte wert;
		public byte Wert {
			get { return wert; }
			set {
				wert = value;
				OnGeändert();
			}
		}
		
		public override event GeändertEventHandler Geändert;
		
		void OnGeändert() {
			if (Geändert != null)
				Geändert();
		}
	}

	interface Beobachter {
		void Aktualisiere();
	}
	
	public class Anzeige : Label, Beobachter {
		KonkretesSubjekt subjekt;

		public Anzeige(KonkretesSubjekt subjekt) {
			this.subjekt = subjekt;
			subjekt.Geändert += new GeändertEventHandler(Aktualisiere);
		}

		public void Aktualisiere() {
			Text = Convert.ToString(subjekt.Wert);
		}
	}

Die Forms lasse ich jetzt mal weg.

Ich hab halt noch nicht so viel Erfahrung mit Patterns. Vielleicht mach ich mir ja auch zu sehr in Kopp. 🤔

10.02.2005 - 20:22 Uhr

Hmm, desswegen sieht hier meine Konstruktion des Observers mit Events auch so merkwürdig aus. (Umständlich und ziemlich sinnlos).
Ich hab bis jetzt auch keine brauchbare Doku über den "sinnvollen" einsatz von Patterns in C# gefunden.
Kann mir vielleicht jemand ein (möglichs deutsches) Buch empfehlen?
Ich hab mir schon "Entwurfsmuster" reingezogen. Aber auch hier wird mehr auf "primitivere" sprachen eingegangen.
(an alle C++ler: ist jetzt nicht abwertend gemeint 😁 )

10.02.2005 - 18:00 Uhr

Moin.

Wenn man sich auf diversen Seiten mal C#- Beispiele zum Beobachter- Muster (Observer) anschaut, dann stellt man fest, dass die Subjekte Referenzen auf den Beobachter immer in Arrays (ArrayList u.s.w.) speichern. Die Benachrichtige- Methode ruft dann immer die Aktualisiere- Methode des Beoachters auf.

Beispiel:
http://www.dofactory.com/Patterns/PatternObserver.aspx

Meiner Meinung nach könnte man das unter C# mit Events eleganter lösen. Ich kann mir allerdings nicht vorstellen, dass ich der erste sein soll, dem diese Idee kommt. 🤔
Also gits irgend einen Grund, der gegen Events sprechen sollte?

30.12.2004 - 08:26 Uhr

Hmm, in dem Code fallen mir gleich mehrere Fehler auf:


this.KeyDown += OnKeyDown ;
this.Paint += OnPaint;

Is 1. schon mal falsch weil es hätte heißen müssen:


this.KeyDown += new KeyEventHandler(meineMethode);

Aber (2.) ist das vorgehen so nicht üblich.
Ich hätte die beiden Zeilen ganz weggelassen und die OnKeyDown und die OnPaint Methode von der Basisklasse überschrieben. Ca. so:


protected override void OnPaint(object sender, PaintEventArgs e)
{
...
}

"e" übergibt dann auch das Graphics- Objekt für dieses Control mit dem du dann Zeichnen kannst


Graphics g = e.Graphics;

Dann ist dir wohl auch schon aufgefallen dass


System.Drawing.Brush brush = new System.Drawing.Brush();

nicht funzt. Das liegt daren das Brush ne abstrakte Klasse ist. So gehts:


System.Drawing.Brush brush = new SolidBrush(Color.Black);

So. Nu haste erstma n bisschen Arbeit 😉

Gruß
Kabaal

29.12.2004 - 16:07 Uhr

Hi!
Ich nehme mal an, dass das nur Ausschnitte aus dem Gesamtcode sind.
Haste vielleicht


Controls.Add(editfeld);

vergessen?

29.12.2004 - 13:14 Uhr

Wenn du jetzt das mit der Form nich hinbekommts könntest du alternativ den Benutzer mit einem Baloon-Tip nerfen. (Weiß allerdings nicht wie das geht)
Oder vielleicht nur das Icon ändern?

29.12.2004 - 11:09 Uhr

Ich meine ja immer noch das dass irgendwie mit der Process- Klasse gehen müsste. Schau sie dir doch mal genauer an. Vielleicht findest du da was in richtung "zuletzt aktiver Process" oder so.

28.12.2004 - 20:56 Uhr

Hmm. Ist die Klasse auch eine Form? Wenn nicht versuch mal auch hier System.Windows.Forms mit using einzubinden.
Oder poste doch mal bitte den Code.
Ein Codeblock sagt mehr als 1000 Worte 😉

Gruß
Kabaal.

28.12.2004 - 19:36 Uhr

TopMost- Eigenschaft auf true.

28.12.2004 - 13:56 Uhr

Hmm, also wenn ich das richtig verstehe willst du, dass die Hauptform deiner Anwendung beim starten nicht den Focus bekommt.
Das is nich so einfach, weil Windows einer Anwendung standartmäßig immer beim starten den Focus gibt.
Man müsste das hinbekommen, wenn man beim Starten der anwendung den Prozess speichert, der vor dieser Anwendung aktiv war.
Ich hab eben mal n bisschen mit der Process- Klasse rumprobiert. Lieder konnte ich keine Lösung finden.
Wenn man mit
Process p = new Process();
einen Process ermittelt bekommt man den eigenen (this) Process.
Das hilft hier nicht besonders 😦
Dann gibts noch die Process.GetProcesses- Mehtode. Die gibt ein Array aller laufenden Processe zurück. Index 0 dieses Arrays ist dann wieder der eigene Process. Aber anders als ich erwartet hatte ist Index 1 nicht der zuvor aktive Process 😦.
Tja und nu bin ich mit meinem Wissen am Ende.
Ach ja, ich hab auch mal in der Form- und in der Screen- Klasse etwas rumgelesen aber auch nix brauchbares gefunden.
Sorry noch mal
Gruß Kabaal.

27.12.2004 - 17:19 Uhr

Tach.

Wenn du die Form anzeigen lässt setzt du den Focus einfach wieder auf die aufrufende Form.
Etwa so:


MeinFenster fenster = new MeinFenster();
fenster.Show();
this.Activate;

Damit das angezeigte Fenster nicht gleich wieder hinter dem Hauptfenster verschwindet sehtzt du am besten die TopMost-Eigenschaft auf true;

Gruß
Kabbi

27.12.2004 - 16:45 Uhr

Moinsen.
Das müsste klappen:


void PanelsLöschen()
{
  for(byte i=0 ; i<Controls.Count ; i++)
  {
    if(Controls[i] is Panel)
    {
      Controls.RemoveAt(i);
      i--;
    }
  }
}

Mit ner foreach-Schleife klappts nicht, da bei jedem "removen" der Index in den Controls verändert wird.

28.11.2004 - 22:42 Uhr

oh, ups 😁 ... das geht ja doch.
Ich hab das hier nur falsch angefangen.
Mit dem Beispiel wollte ich eigendlich nur beschreiben, dass ich die Eigenschaften eines Controls an die Eigenschaften eines Objektes binden will. Das haut ja auch hin. Nur wenn die Eigenschaft des Objektes geändert wird, wirkt sich das nicht automatisch auf das Control aus.
Ich hab aber die Uhrsache gefunden. Wenn jemand mal das gleiche Problem haben sollte:
Wenn sich die Eigenschaft des Controls mit dem des Objektes auch ändern soll muß das Objekt die Schnittstelle IBindingList implementieren.
Wer sich das dann aber mal genauer anguckt wird sich (wie ich) überlegen ob das ganze dann den Aufwand lohnt.
naja bis denne dann...

24.11.2004 - 21:59 Uhr

Hallöchen mal wieder.

Ich möchte den Inhalt zweier TextBoxen an eine Variable binden. Dazu habe ich eine Eigenschaft für die Variable (mit get, set) eingerichtet.
Das ganze sieht dann so aus:


using System;
using System.Windows.Forms;
using System.Drawing;

namespace TestDataBinding {
	
	public class Fenster : Form {
		TextBox tBox1, tBox2;
		byte zahl;
		byte Zahl {
			get {return zahl;}
			set {zahl = value;}
		}
		
		public Fenster() {
			zahl = 1;
			tBox1 = new TextBox();
			tBox1.Location = new Point(50,20);
			tBox1.DataBindings.Add("Text", Zahl, "");
			Controls.Add(tBox1);
			tBox2 = new TextBox();
			tBox2.Location = new Point(50,60);
			tBox2.DataBindings.Add("Text", Zahl, "");
			Controls.Add(tBox2);
		}
		
		public static void Main() {
			Application.Run(new Fenster());
		}
	}
}

Wie man sieht weise ich der Variable "zahl" zu beginn den Wert von 1 zu. Beim Start des Programms zeigen dann auch beide TextBoxen den wert von 1 an.
Jetzt hatte ich eigendlich erwartet, dass wenn ich den Inhalt einer TextBox ändere, sich der Inhalt der anderen TextBox auch ändert. (natürlich auch die Variable "zahl"). - Hmm, tuts aber nich.
Ich meine ich hab hier im Forum mal n ähnliches Problem gesehen, kanns aber nicht mehr finden.

Danke schon mal...

22.11.2004 - 21:43 Uhr

Soa ich hab hier mal was gebastelt. Ich meine das sollte so funzen.
(Wenn jemand ne besse Lösung hat, bitte mal Posten)
Da ich mich immer so unverständlich ausdrücke hab ich mal n Codebeispiel geschrieben.
Wir haben hier n Hauptfenster in dem es ein Papier- und ein Mülleimer- Control gibt. Man kann das Papier- Control auf den Mülleimer ziehen damit es verschwindet.
Hier ham wa erst mal das Hauptfenster:


using System;
using System.Windows.Forms;
using System.Drawing;

namespace Test {

	class Hauptfenster : Form {
		Papier papier;
		Mülleimer mülleimer;
		
		public Hauptfenster() {
			papier = new Papier();
			papier.Location = new Point(20,20);
			papier.MouseUp += new MouseEventHandler(Gedragt);
			Controls.Add(papier);
			mülleimer = new Mülleimer();
			mülleimer.Location = new Point(120,80);
			Controls.Add(mülleimer);
		}
		
		void Gedragt(object sender, MouseEventArgs e) {
			Rectangle papRect = papier.Bounds;
			Rectangle müllRect = mülleimer.Bounds;
			if(papRect.IntersectsWith(müllRect))
				Controls.Remove(papier);
		}
		
		public static void Main(string[] args) {
			Application.Run(new Hauptfenster());
		}
	}
}

Das Papier Control:


using System;
using System.Windows.Forms;
using System.Drawing;

namespace Test {

	class Papier : Control {
		int mausPosX, mausPosY;
		bool mausGedrückt;
		
		public Papier() {
			Size = new Size(40,60);
			BackColor = Color.White;
		}
		
		protected override void OnMouseDown(MouseEventArgs e) {
			mausPosX = e.X;
			mausPosY = e.Y;
			mausGedrückt = true;
			base.OnMouseDown(e);
		}
		
		protected override void OnMouseUp(MouseEventArgs e) {
			mausGedrückt = false;
			base.OnMouseUp(e);
		}
		
		protected override void OnMouseMove(MouseEventArgs e) {
			if(mausGedrückt)
				Location = new Point(Left+e.X-mausPosX, Top+e.Y-mausPosY);
			base.OnMouseMove(e);
		}
	}
}

Und der Mülleimer:


using System;
using System.Windows.Forms;
using System.Drawing;

namespace Test {

	class Mülleimer : Control {
		
		public Mülleimer() {
			Size = new Size(80,100);
			BackColor = Color.Red;
		}
	}
}

Das Ding steckt in der "IntersectsWith" - Methode. Hier wird controlliert, ob sich die Controls in irgend einer Weise überschneiden.

Bis denne ...
Kabaal

22.11.2004 - 14:12 Uhr

Wow das war ja ne schnelle Antwort.
Wenns geht wollte ich das Benutzen der alten API eigendlich umgehen.
Trotzdem Danke...

22.11.2004 - 13:59 Uhr

Hallo.

Ich hab hier das gleiche Problem und war froh, dass ich bei diesem Thema hier gleich fündig geworden bin.
Mein Control lässt sich jetzt auch super verschieben.
Nun möchte ich aber noch zusätzlich das Control über einem anderen Control "loslassen". (ähnlich Drag n Drop) Momentan bleibt dann das verschiebbare Control über dem anderen stehen.
Gibts vielleicht irgend ein Event welches ausgelös wird, wenn ein Control ganz oder teilweise von einem anderen verdeckt wird?
Ich meine bei der "alten" Win API gabs sone Funktion.

Danke schon mal...

31.10.2004 - 01:19 Uhr

Joa, muss ich datt halt so machen. Schade, ich dachte das geht auch so.
Danke.

31.10.2004 - 00:08 Uhr

Hallo.
Ich versuche hier ne DataTable zu serialisieren und zwar so:


if(saveFileDialog.ShowDialog() == DialogResult.OK) {
  XmlSerializer xml = new XmlSerializer(typeof(DataTable));
  FileStream fs = new FileStream(saveFileDialog.FileName, FileMode.Create,FileAccess.Write);
  xml.Serialize(fs, tabelle);
  fs.Close();
}

Zur Laufzeit tritt dann folgender Fehler auf:
"Fehler beim Reflektieren des Typs 'System.Data.DataTable'"
Der Fehler tritt in der Zeile mit dem XmlSerializer auf. Wenn ich den Part "typeof(DataTable)" nur mal testenshalber mit "typeof(DataSet)" ersetze gits keinen Fehler.
In der Doku steht, dass DataTable serialisierbar ist. Ich hab trotzdem mal meine eigene Klasse erstellt und von DataTable erben lassen. Dann hab ich das "Serializable"- Attribut davor gestetz. Da entsteht der gleiche fehler.
Tja und nu weiß ich nicht weiter. Ich meine es kann nur an dem DataTable liegen.
Vielleicht kann mir jemand helfen.
Danke schon mal...

11.10.2004 - 13:45 Uhr

Ich kann mir eigendlich auch nicht vorstellen, dass es an der Sprache liegt. DirectX Anwendungen sollen 5 bis 10 % langsamer laufen, da kann es ja eigendlich nicht sein dass "normale" Anwendungen derart langser laufen wie es hier der Fall ist.

Was die 2005er Version angeht: Ich teste hier grade die Express und bin begeistert. Ich glaub nicht, dass ich das nervlich durchhalte bis zum Release der 2005er zu warten 😉
Es sei denn irgendwer sagt mir jetzt, das die 2003er viel schlechter ist.

09.10.2004 - 23:33 Uhr

Supi, danke. Ich glaub die Trailversion is bald nich mehr nötig. Ich bin schon so gut wie überzeugt.

09.10.2004 - 23:27 Uhr

Hmpf ich Pattkopf. Das wars. Ich teste das grade mit der Express Version 2005 aus. Vorher hatte ich #Develop, da musste man nicht auf die dll verweisen, das ging automatisch.

Danke.

09.10.2004 - 23:16 Uhr

Hallo alle zusammen.
Seit dem ich mit C# arbeite benutze ich #Develop und bin mit dem Funktionsumfang und mit der Bedienung auch recht zufrieden.
Das die Codekompletierung ein bisschen hakelig ist schob ich immer auf mein lames Notebook. Neulig testete ich mal Visual C# Express 2005 aus. Als beim tippern das Codekompletierungsfenster nahezu ohne Verzögerung aufklappte konnte ich mir ein "Boa ey" nicht verkneifen. Jetzt überlege ich ob ich mir doch mal Visual Studio zulegen sollte. Ich hoffe Ihr könnt mir einige Fragen beantworten um mir die Entscheidung zu erleichtern.

  1. Ist Visuel Studio wirklich schneller oder mach ich hier nur was falsch?

  2. Bei #Develop besteht das Setup Projekt lediglich aus einer editierbaren xml Datei. Gibt es bei Visual Studio dafür n Assistenten oder n Designer oder sowas?

  3. Ich hab mal n bisschen rumgesucht aber nix gefunden. Gibs irgendwo ne Studio Version zum antesten (außer die Express, die läuft anscheinend nur mit Framework 2.0)?

Danke schon mal.

09.10.2004 - 22:58 Uhr

Tach.

Ich hab mal Version 2.0 angetestet und musste feststellen, das es hier offensichtilich andere Namespaces gibt.

using System.Drawing;

funzt nicht. Der Compiler meint, dass der Namespace nicht vorhanden ist.
Hat das jemand anders auch schon bemerkt oder mach ich hier was falsch?

07.10.2004 - 16:25 Uhr

In der .NET Doku heißt es außerdem, dass Daten aus Dialogfenstern als Objekt zurückgegeben werden sollten.

ms-help://MS.NETFrameworkSDKv1.1.DE/cpguidenf/html/cptskRetrievingDialogBoxInformationUsingObjects.htm

Ich hoffe der Link funzt so.

05.10.2004 - 14:00 Uhr

Also, ich hab hier ma n bisschen inner .NET Docu rumgelesen.

Es wird immer bei der verwendung von "new", also bei der erstellung eines Objektes eine Referenz zurückgegeben. (In der Docu nennen die das "Verweis"). Nun kann ich aber leider kein Objekt von einem Typen erstellen (wie denn auch). Ich habs mal mit Arrays probiert, klappt aber auch nicht. Eine andere Möglichkeit eine Referenz zu erstellen habe ich nicht gefunden. .Clone() und .MemberwiseClone() erstellen zwar Referenzen, aber erst nadem sie eine Kopie des Objektes erstellt haben.

Die einzige Möglichkeit, die ich gefunden habe besteht in der verwendung von unsicheren Code (schlimme Sache 8o). Der betreffende Codeblock wird mit "unsafe" gekennzeichnet und beim Compilieren das "/unsafe" Parameter angegeben.
So. Jetzt kann man wieder nach herzenslust mit Zeigern aller *string und &string rumsauen.

Sorry, ne bessere möglichkeit habe ich nicht gefunden. In der Docu wird übrigens vor der Verwendung von unsicheren Code abgeraten. Aus diesem Grund werde ich hier wohl alles umstricken und die ganze Sache irgendwie umgehen.

Bis denne...

04.10.2004 - 16:46 Uhr

@Lynix: Tja das is ja grade mein Problem. Ich kann die Variable nicht außerhalb deklarieren, wei ich ja noch garnicht weiß welche das sein wird (bzw die Variable ja schon irgedwo in der classe besteht)

@Fabse: Genau. unter C++ hätte ich warscheinlich einfach nur den Zeiger auf die Variable zurückgegeben. Das geht bei C# aber nur im "unsave"- Modus. Das wollte ich eigendlich vermeiden.
Die sache mit dem Get-/Set könnte funzen ich habe hier allerdings an die 100 Variablen das is ne menge tipparbeit.

Die Referenz selber kann man wohl nicht in eine Variable speichern?

ungefähr so:


irgendeintyp referenz = ref meineVariable;

04.10.2004 - 13:21 Uhr

Ne, das hatte ich auch schon probiert.
Das geht ja schon mit dem Methodenkopf los:


ref string MeineFunktion(string welcheVariable) {
...
}

haut nich hin, da beschwert sich der Compiler.

03.10.2004 - 22:20 Uhr

Hallo.

Ich habe hier eine Klasse mit mehreren Variablen und einer Methode. Diese Methode übernimmt einen Parameter, sucht die passende Variable heraus und soll diese dann als Referenz zurückgeben.
Ziel soll sein, dass ich dann mittels dieser Referenz auf die richtige Variable zugreigen kann (lesen und schreiben).
Ich habs schon mit dem "out- Parameter" versucht, klappt aber damit nicht.
Hat irgend wer ne Idee, wie ich das machen kann?

Danke schon mal...

23.09.2004 - 17:16 Uhr

Heureka!!!

Also habs mal mitm XmlSerializer probiert. Der hat dann allerdings zur Laufzeit ne Ausnahme "Kann Ojekt nicht Reflektieren" geschmissen.
In der .NET Docu bin ich dann aber auf einen Verweis auf den BinaryFormatter gestoßen. Mit dem Klappts dann prima. Allerdings wird dann nur ne Binärdatei anstatt einer xml- Datei in den Stream geschrieben (aber damint kann ich leben)

19.09.2004 - 21:27 Uhr

Achso
ich dachte der BindingContext gehört zu der jewailigen TestBox und nicht zum DataSet. Menno, dann muß ich das hier alles anders machen...

Danke erstmal...

19.09.2004 - 18:20 Uhr

Moinsen.
Ich bin hier schon wieder am verzweifeln.
An zwei TextBoxen soll via DataBinding die Text- Eigenschaft an zwei bestimmte
Felder in einer DataTable gebunden weden (Spalte und Zeile).
Ich wollte das eigendlich so machen:


this.textBox1.DataBindings.Add("Text", dataSet, "Tebelle.Spalte1");
this.textBox1.BindingContext [dataSet, "Tabelle"].Position = 0;
this.textBox2.DataBindings.Add("Text", dataSet, "Tebelle.Spalte1");
this.textBox2.BindingContext [dataSet, "Tabelle"].Position = 1;

Wenn man nun Text in die TextBoxen eigibt wird aber nur der Text der zweiten TextBox in die zweite Zeile eingetragen.

Ich hab schon immer echt coole Fragen was? 😁

19.09.2004 - 18:03 Uhr

using System;
using System.Data;
using System.Drawing;

namespace Test {
	
	public class SetMitBild : DataSet {
		public Image bild;
		
		public SetMitBild() {
			//hier steht nix
		}
	}
}

Im Hauptprogramm sollte das dann ungefähr so aussehen:


...
SetMitBild testset = new SetMitBild();
testset.bild = Image.FromFile("Bild.mpg");
testset.WriteXml("Test.xml");
...

Schaut man sich die "Test.xml"- Datei an, stellt man fest, dass sie leer ist.
Ich hab irgendwie das Gefühl, ich müsste das Image mehr an das Set binden, aber wie?

@cYaONE: Habs mir mal angeschaut, scheint auch zu funzen. Ich dachte nur vielleicht kann man das auch übersichtlicher lösen.

18.09.2004 - 00:43 Uhr

Hallöchen.

Heute hab ich mal wieder n richtig tolles Prob:

Ich hab hier n DataSet, welches ein Image enthält. Wenn ich das Set mit "WriteXml" speichere enthält das .xml- File merkwürdigerweise das Image nicht.
Logischerweise ist das Set nach "ReadXml" dann auch leer, obwohl die Datei eigendlich das Image enthalten sollte.

tja und nu ?!?

29.08.2004 - 00:26 Uhr

Kurz und schmerzlos 😁

Danke.

28.08.2004 - 22:04 Uhr

Hi.

Kann man eigendlich aus 2 oder mehreren Klassen erben?

Danke schon mal.

28.08.2004 - 21:13 Uhr

Moinsen.

Ich will hier n Formular einscannen und die Eingaben, die in meinem Programm vorgenommen wurden in das digitale Formular eintragen und dann ausdrucken.

Ich dachte mir eigendlich, dass ich eine Bitmap von der .jpg- Datei erzeuge und dann mittels DrawString()- Methode den Text einfüge.
So weit so gut, allerdings kann man von einer Bitmap kein Graphics- Objekt bilden.

Tja und nu guck ich dumm außer Wäsche X(

28.08.2004 - 20:53 Uhr

Hmm, Du könntest Deine "neues Steuerelement"- Klasse von einem Panel ableiten, dann alle benötigten Controls da reinpacken und zum Schluß nur noch das "neue Steuerelement" in deiner Form wie gewohnt plazieren.

28.08.2004 - 13:12 Uhr

Hmm, lass mal sehn ob ich das richtig verstanden habe.
Du hast also ein eigenes Steuerelement geschaffen (z.B. eine TextBox die Musik spielt).
Wir nennen diese klasse jetzt ma "MusikTextBox".
Die willste auf ne Form packen und anzeigen.
Dat geht genau wie mit allen anderen Steuerelementen:
erstma deklarieren

private MusikTextBox tbMeineTextBox;

im Konstruktor deines Forms die TextBox iniziieren und Einstellen:

tbMeineTextBox = new MusikTextBox();
tbMeineTextBox.Location = new Point(100,100);

gleich danach dem Form hinzufühen (und anzeigen)

this.Controls.Add(tbMeineTextBox);

Wenn du das Steuerelement von der Form entfernen willst mussu dat machen:

this.Controls.Remove(tbMeineTextBox);

Ich hoffen ich habs auch so verstanden wie du's gemeint hast.

27.08.2004 - 14:13 Uhr

Hi Leute.

Wenn ich ein Proggy für Windows schreibe habe ich logischerweise die Klasse
"MainForm" (oder so ähnlich). Die Frage ist nun wie voll packe ich diese Klasse und
ab wann entscheide ich mich für eine bestimmte Mehthode eine andere Klasse
anzulegen.
Die meisten Mehthoden zur verwaltung der HauptForm greifen ja in fast jeder Zeile
auf ein Steuerelement der Form zu. Diese gehören meiner Meinung nach alle in die Hauptklasse. Bei komplizierten Forms mit vielen Controls kommen so aber schnell
über 1000 Zeile zu sammen. Sollte in solchen Fällen eine extra "MainFormFunktions" Klasse erstellt werden?

(Oder mach ich mir hier einfach nur zu sehr n Kopp?)

26.08.2004 - 17:58 Uhr

Ich schon wieder.

Komando zurück!

Am besten geht's, wenn man für jede ComboBox ein DataView der Tabelle erstellt.
Außerdem kann man so auch noch bequem filtern und sortieren.

Sorry, bei mir dauerts mit der Lösung halt immer etwas länger 😁

22.08.2004 - 23:54 Uhr

Tach!

Also ich hab das jetzt so gemacht:


...
foreach(DataRow elem in objDataSet.DataTable.Rows) {
	this.ComboBox1.Items.Add(elem["Spalte1"]);
	this.ComboBox2.Items.Add(elem["Spalte1"]);
}
...

Damit hab ich die ComboBoxen nicht an das DataSet gebunden sondern "nur" die Index- Listen gefüllt. Das klappt ganz gut.

Ich schätze man könnte alternativ auch das DataSet- Objekt kopieren und jede ComboBox an ihr eigenes DataSet binden.

Schüsss...

19.08.2004 - 22:01 Uhr

Moinsen.

Ich hab das gleiche Prob wie unter Punkt 1.
Allerdings hab ich nicht gerafft wie ich das ganze mit ner For- Schleife unterbinden soll. 8o

Ich hab auch mehrere ComboBoxen die alle auf die selbe Tabelle in einem DataSet zugreifen. Wenn ich nun in einer Box den SelectedIndex ändere, ändert er sich komischerweise in allen anderen auch (?!?).

Wat nu ?(

14.08.2004 - 10:40 Uhr

Is ja auch logich.

Manchmal hat man aber auch n Brett vorm Kopp.

Danke noch mal an alle

13.08.2004 - 15:48 Uhr

UhOh! Unvorhergesehenes Problem!

Ich versuche die Eigenschaften nun in ein Array zu kopieren:


...
int i = 0;
foreach(Control elem in this.Controls){
	if(elem is TextBox)
		array[i] = elem.Text;
	if(elem is CheckBox)
		array[i] = (CheckBox)elem.Checked.ToString();
	i++;
}
...

Das mit dem rekursiven lass ich jetzt mal weg.

Die Eigenschaft der Textbox wird ja übernommen aber der Compiler beschwerd sich jetzt bei der CheckBox mit:
'System.Windows.Forms.Control' enthält keine Definition für 'Checked'

Toll, das weiß ich auch, desshalb ja die explizite Konvertierung.
Jezt steh ich mal wieder dumm da.
Bitte helft mir! Ich heul hier schon X(

12.08.2004 - 16:56 Uhr

Ich hatte auch mal Suse drauf und war sehr zufrieden.
Musste dann zu Windows wegen fehlender Hardwareunterstützung wechseln.

Also: Wenn du die Personal installd hast mußt du im Yast einfach eine neue Installationsquelle angeben. Vordefiniert ist natürlich die CD von der zu installiert hast. Gib nun als weitere Quelle den Pfad auf einem der Suse Server in Netz an und schon hast du Zugriff auf alls Pakete (auch die aus der Professional).
Ich kann dir nur nicht mehr genau sagen wo das im Yast ging. Is bei mir schon ne weile her aber ich habs so gemacht.

Bis denne...

12.08.2004 - 16:46 Uhr

Sorry, dass ich mich jetzt erst melde.
Ich hab mal n bisschen "Rumgespielt". Die Lösung mit dem DataSet hat mir anfangs am besten gefallen. Die musste ich allerdings wieder verwerfen, da einige Steuerelemente in meiner Form schon andere DataBindings besaßen.
Ich werds jetzt so machen, dass ich auf die Elemente mit der rekursiven Methode zugreife und die Default- Werte in ein Array speichere.

Danke noch mal für die fixe Hilfe.