Laden...
Avatar #avatar-2265.jpg
Lost-Ha(n)f-PHP myCSharp.de - Member
Fachinformatiker [AE] Dabei seit 03.04.2007 58 Beiträge
Benutzerbeschreibung

Forenbeiträge von Lost-Ha(n)f-PHP Ingesamt 58 Beiträge

06.08.2011 - 19:42 Uhr

Hallo Community,

ich habe mich mal in die Welt des DirectX gewagt. Ich habe eine CodeProject -Seite als Einstiegshilfe genommen und ein VB.NET Project manuell nach C# portiert. Allerdings bekomme ich keine Ausgabe beim Run.

Program.cs


// Einstiegspunkt
[STAThread]
private static void Main(string[] args)
{
	MainForm mainForm;
	Renderer r;
	Controller c;
	
	mainForm = new MainForm();
	r = new Renderer();
	c = new Controller(mainForm, r); // Hier ist Schluss
	
	mainForm.Show();
	while(mainForm.Created)
	{
		c.Render();
		Application.DoEvents();
	}
}

Debugt man das ganze nun finden wir im Controller folgenes:


public class Controller
{
	
	private Control m_Target;
	private Device m_Device;
	private Renderer m_Renderer;
	private PresentParameters m_presentParameters;
	private bool m_DeviceLost;
		
	public Controller(Control target, Renderer renderer)
	{
		m_Target = target;
		m_Renderer = renderer;
		m_DeviceLost = false;
		
		try
		{
			InitializeGraphics(); // Hier ist Schluss
		}
		catch(Exception ex)
		{
			System.Diagnostics.Debug.WriteLine(ex.ToString());
		}
	}
	
	protected void InitializeGraphics()
	{
		
		m_presentParameters = new PresentParameters();
		m_presentParameters.Windowed = true;
		m_presentParameters.SwapEffect = SwapEffect.Discard;
		m_presentParameters.AutoDepthStencilFormat = DepthFormat.D16;
		m_presentParameters.EnableAutoDepthStencil = true;
		
		int adapterOrdinal = Manager.Adapters.Default.Adapter;
		Caps caps = Manager.GetDeviceCaps(adapterOrdinal, DeviceType.Hardware);
		
		CreateFlags createFalgs;
		
		if(caps.DeviceCaps.SupportsHardwareTransformAndLight)
		{
			createFalgs = CreateFlags.HardwareVertexProcessing;
		}
		else
		{
			createFalgs = CreateFlags.SoftwareVertexProcessing;
		}
		
		if(caps.DeviceCaps.SupportsPureDevice)
		{
			createFalgs = createFalgs | CreateFlags.PureDevice;
		}
		
		m_Device = new Device(adapterOrdinal, DeviceType.Hardware, m_Target, createFalgs, m_presentParameters);
		
		m_Device.DeviceLost += OnDeviceLost;
		m_Device.DeviceReset += OnDeviceReset;
		
		SetupDevice();
	}

	// ...
}

Wenn ich im Konstruktor bei InitializeGraphics(); einen DebugPunkt setze, dann kommt er dort an, setze ich noch einen bei m_presentParameters = new PresentParameters(); in InitializeGraphics() so kommt er da nicht an. Ich erhalte auch keine Fehlermeldung. Ich tippe mal, dass im Konstruktor von PresentParameters ein WaitOne() oder ähnliches aufgerufen wird und er auf irgendetwas wartet. Leider habe ich keine Ahnung auf was, wie ich es umgehen könnte, so wonach ich genau zur Fehlerbehebung suchen sollte.

Könnt ihr mir helfen?
Danke, im Voraus.

18.07.2011 - 20:16 Uhr

Hallo,

ich lese meinen BatteryStatus aus aber SystemInformation.PowerStatus liefert überwiegend wenig hilfreiche Informationen.

Der PowerLineStatus wird ommer korrekt angezeigt, allerdings sind BatteryLifeRemaining und BatteryFullLifetime beide immer -1 was wohl daran liegt, dass BatteryChargeStatus auch unknown ist.

Meine Frage ist nun: Wieso ist das unknown? Was erkennt .NET da nicht? Das OS-Icon (Vista x86) erkennt alle Änderungen und funktioniert.
Und kann man daran etwas ändern?

[Edit]
Sorry, kurze Änderung. BatteryChargeStatus ist nicht Unknown sondern NoSystemBattery.

02.04.2011 - 20:50 Uhr

Gut zu wissen, aber das wuerde ja bedeuten, dass ich CreateHandle() direct nach dem Konstruktor ausrufen muss, denn ich kann spaeter nicht mehr im GUI-Threat ein Handle erstellen, weil ich das Handle brauche, um den Invoke zu machen. Da beiszt sich der Hund in den Schwanz ^^

Zur Zeit des Invokes laeft Application.Run() selbstredent. Ist es denn ausreichend, CreateHandle() nach dem Konstruktor aber vor Application.Run() aufzurufen oder fuehrt das zu weiteren Problemen?

02.04.2011 - 17:27 Uhr

Sorry, hate ich vergessen zu schreiben:


private void SafeHandleCreation() {
	if(!this.IsHandleCreated) {
		this.CreateHandle();
	}
}

02.04.2011 - 16:16 Uhr

Hallo Community,

folgender Code in einer Form:


public void InitialShow() {
	this.SafeHandleCreation(); //Create Handle for Invoke
	if(this.InvokeRequired) {
		this.Invoke(new MethodInvoker(InitialShow), new object[] { });
		return;
	}
	this.Show();
}

private void ClientControl_OnConnectionEstablished(object sender, Connection c) {
	this.SafeHandleCreation();
	this.Invoke(new MessageHandler(AddMessage), new object[] { c, "Connection established." });
}
		
private void AddMessage(object sender, string message) {
	txtMessageLog.AppendText(DateTime.Now.ToShortTimeString() + " " + message + " ("+ ((Connection)sender).ID +")" + ".\r\n");
}

und folgendes Problem, wenn ich nach Programmstart die Funktion InitialShow() aufrufe, wird alles problemlos ausgeführt. Wenn jedoch bevor die Form angezeigt wird, das Event OnConnectionEstablished ausgelöst wird, kommt es zunächst auch noch zu keinem Fehler.
Wenn ich aber dann versuche, die Funktion InitialShow() aufzurufen, spingt der Debugger zu InvokeRequired und this.Invoke, allerdings passiert danach nichts mehr...
Keine Exception, kein garnichts.

Was ist hier passiert? Irgendwelche Ideen / Anregungen?

26.09.2010 - 12:13 Uhr

richtig.

Das Problem lag wohl auch offensichtlich woanders, da ich dort nichts geändert habe, das Problem aber verschwunden ist.

Trotzdem danke ich euch für eure Mühen!

26.09.2010 - 11:49 Uhr

Die sind gecastet. Beim Auslesen:


string s = (string)( (object[])( (object[])objs )[0] )[0];

Erzeugt einen Fehler.
Das hat ja auch bisher auf 3.5 alles super geklappt, aber jetzt nun nicht mehr...

26.09.2010 - 11:18 Uhr

Hallo Community,

ich habe heute von .NET 3.5 auf 4.0 gewechselt und die Apps getestet...
und da ist schon der erste Fehler, zu dem ich leider in Netz nichts gefunden habe.


object[] objs = new object[] {
    new object[] { "", 3 },
    new object[] { "test", 4 }
};

Wenn ich das ausführe und debugge, beinhaltet jedes Element der inneren object-arrays "The object does not have an indexer property."

Wo rührt das denn her? Und wie kann ich das beheben?

Ich bin für alle Anregungen dankbar.

19.08.2010 - 02:06 Uhr

Hallo Community,

ich habe folgende Collection geschrieben:


public class ObservedList<T> : Collection<T> {
	public delegate void CollectionItemHandler(object sender, T item);
	public event CollectionItemHandler ItemAdded;
	public event CollectionItemHandler ItemRemoved;
	public event CollectionItemHandler ItemSet;
	
	public ObservedList() {
		
	}
	
	public void AddRange(T[] items) {
		foreach(T item in items) {
			Add(item);
		}
	}
	
	protected override void ClearItems() {
		base.ClearItems();
	}
	
	protected override void InsertItem(int index, T item) {
		base.InsertItem(index, item);
		RaiseItemAdded(item);
	}
	
	protected override void RemoveItem(int index) {
		RaiseItemRemoved(base[index]);
		base.RemoveItem(index);
	}
	
	protected override void SetItem(int index, T item) {
		base.SetItem(index, item);
		RaiseItemSet(item);
	}
	
	protected void RaiseItemAdded(T item) {
		if(ItemAdded != null) {
			ItemAdded(this, item);
		}
	}
	
	protected void RaiseItemRemoved(T item) {
		if(ItemRemoved != null) {
			ItemRemoved(this, item);
		}
	}
	
	protected void RaiseItemSet(T item) {
		if(ItemSet != null) {
			ItemSet(this, item);
		}
	}
}

Diese Collection befindet sich in einem Control und ist dort als Property unter 'Items' veröffentlicht. Nun habe ich folgendes Problem. Wenn ich in der Entwicklungsumgebung im Eigenschaftenfenster auf 'Items' klicke, kann ich wie vorgesehen auch Einträge einrichten.

Leider ist der dynamisch generierte Code nicht korrekt.
Das Resultat bei zwei Einträgen ist:


this.collapseBoxContainer1.Controls.Add(this.collapseGroupBox1);
this.collapseBoxContainer1.Controls.Add(this.collapseGroupBox2);
new KBremote_intern.ObservedList<KBremote_intern.CollapseGroupBox>().AddRange(new KBremote_intern.CollapseGroupBox[] {
	this.collapseGroupBox1,
	this.collapseGroupBox2});

In Zeile 3 wird eine neue Collection angelegt, allerdings nicht this.collapseBoxContainer1.Items zugewiesen. Wenn ich alle drei Zeilen zu folgendem ändere, passt alles:


//this.collapseBoxContainer1.Controls.Add(this.collapseGroupBox1);
//this.collapseBoxContainer1.Controls.Add(this.collapseGroupBox2);
this.collapseBoxContainer1.Items.AddRange(new KBremote_intern.CollapseGroupBox[] {
	this.collapseGroupBox1,
	this.collapseGroupBox2});

Allerdings werde ich nicht im dynamischen Code rumfingern.

Meine Frage ist nun:1.Kann sich jemand erklären, warum das Programm diese Einträge erstellt? 1.Wie muss eine Collection aussehen, damit das Programm das richtig anlegt?

(Es steht zwar links an der Seite aber ich benutze SharpDevelop (3.2.0:5505))

Ich danke euch für alle Anregungen.

17.08.2010 - 15:36 Uhr

Vielen Dank für eure Hilfe.

Ich habe mich mit den Global Hooks beschäftigt. Jetzt habe ich somit die Möglichkeit zu erfassen, wenn ein Mouse_Click im jeweiligen Prozess ausgeführt wird.
Dazu 2 Fragen:
1.Gibt es die Möglichkeit alle Prozesse global überwachen zu lassen (ohne jeden Prozess einzeln zu überwachen)? 1.Bekomme ich irgendwie ein Referenz zu dem Object, auf das geklickt wurde (z.B. ein Button in einer anderen Anwendung)?

Ich danke euch im Voraus.

16.08.2010 - 00:07 Uhr

Hallo Community,

ich benötige für ein Projekt eine Möglichkeit Events anderer Anwendungen abzufangen. Dabei möchte ich gerne wissen, wenn der Benutzer einen Mouse_Click (Event) ausführt,
welches Object er in welcher Anwendung / welchem Prozess getroffen hat und einen Verweis auf dieses Object, um ggf. mit dem Object selbst zu interagieren.

Leider habe ich keine Ansazt dazu. Ich bin über Ideen, Literatur und alles andere dankbar.

21.06.2010 - 18:36 Uhr

Hallo Leute,
danke für eure zahlreichen Antworten.
volatile hat das Problem anscheinend gelöst, da es bisher kein einziges Mal mehr dazu gekommen war.

21.06.2010 - 18:36 Uhr

Hallo Leute,

jetzt habe ich aber ein ähnliches Problem auf der Gegenstelle. Der Server greift in diesem Fall von zwei Threads auf den TcpClient zu. Beide Threads sind nicht der Main-Thread, der das Object instanziiert und die Verbindung aufbaut. Jedoch bemerken die Threads nicht, dass die Gegenstelle schon lange tot ist.

Folgender Versuch:


private void ReadLoop() {
	//[...]

	while(_Connected) {
		try {
			Thread.Sleep(10);
			
			_cln.GetStream().Write(new byte[0], 0, 0); //Das sollte ohne Gegenstelle nicht funktionieren
			
			if(_cln.Available == 0) { continue; }
			
			bytes = new byte[length];
			if((read = _cln.GetStream().Read(bytes, 0, length)) > 0) {
				_StatBytesReceived += read;
				UpdateStatistics();
				
				tmpBuffer = System.Text.Encoding.UTF32.GetString(bytes, 0, read)
				lock(_LockObject) {
					_Buffer += tmpBuffer;
				}
			}
		} catch {
			ShutDown();
		}
	}
}

Ohne Daten spielt sich die Aktion lediglich im Bereich


	try {
		Thread.Sleep(10);

		_cln.GetStream().Write(new byte[0], 0, 0); //Das sollte ohne Gegenstelle nicht funktionieren

		if(_cln.Available == 0) { continue; }

ab.

Nun habe ich einfach eine Verbindung mit telnet aufgebaut und dann wieder geschlossen. Beim Debug steht _cln.Connected noch auf true und er meint auch lesen und schreiben zu können...

An sonsten funktioniert der TcpClient ohne Probleme. Mir fehlt da leider jegliche Idee.
Noch als Hinweis, da dieses Thema oben einmal aufgekommen ist: Ich verwende ein x64 System, kompiliere aber für x86.

Ich bin für alle Ideen dankbar. Falls noch Informationen fehlen sollte, werdet ihr euch sicher melden.

Danke im Voraus.

[EDIT]
Kleine Korrektur:
Wenn ich _cln.GetStream().WriteByte((byte)65); aufrufe, wenn merkt er schon, dass da nichts mehr ist. aber ich habe nicht vor konstant A's durch die Gegend zu posten 😉

Wobei ich wieder bei meiner Einstiegsfrage bin: Wieso merkt er das nicht?

20.06.2010 - 15:35 Uhr

Hallo Community,

ich arbeite gerade an einer Anwendung, die mehrere Threads benutzt.
Der Main.Thread startet zwei weitere Threads. In denen wir eine Schleife durchlaufen, bis die _Connected (bool) false gesetzt wird.

_Kleine Information:
Die deinen weiteren Threads sind private Member einer Klasse aus der auch die beiden Threads vom Main-Thread gestartet werden. Auch Connected ist ein privater Member dieser Klasse. Alle Zugriffe spielen sich auch innerhalb diese Klasse ab.

Das Problem an der Geschichte ist, dass der eine Thread diese Umstellung von true auf false nie, der andere manchmal mitbekommt. D.h. die Thread laufen bin in die Ewigkeit weiter und die Anwendung im Hintergrund ebenfalls...

Woran liegt das? Ist das Problem sicher zu umgehen, wenn ich ein LockObject anlege und jejden Zugriff über lock regele? Oder gibt kann es da noch ein anderes Problem geben?

Ich werde mich mal daran setzen und das Lock Implementieren, aber das ist wohl großer Aufwand, weshalb ich gerne schon wüsste, ob sich das alle überhaupt loht / lohnen kann.

Ich bin für jegliche Hilfe dankbar.

26.01.2010 - 15:16 Uhr

Hallo Community,

ich habe eine Frage zu Eingenschaften. Ich habe eine Klasse, die über mehrere Eigenscahften verfügt. Ich möchte diese allerdings etwas strukturierter Ausgeben.

Hier ein Beispiel:


class Test {
  private string _DataServer;
  private string _MailServer;
  private int _DataTimeout;
  private bool _MailUse;

  public Test() {
    //Hier werden alle Attribute schön gefüllt...
  }

  #region "Eigenschaten"
  //Hier sind die Eigenscahften
  public string xxx {
    get { ... }
    set { ... }
  }
  #endregion
}

Ich möchte diese Attribute nun extern so ansprechen können:


  Test t = new Test();

  t.Data.Server;
  t.Mail.UseMail;

Gibt es eine Möglichkeit das innerhalb dieser Klasse zu machen, ohne die Attribute in eigene Klassen zu verlagern und diese dann in Test als Eigenschaften anzuzeigen?

17.01.2010 - 15:11 Uhr

Hallo,

ich habe ein Problem bei, Lesen meines Streams - nicht dass es nicht funktionieren würde. Nein, ich will nur bestimmte Teile einer Datei lesen. D.h. mit Seek nach hinter, aber auch nach vorne springen.

Problem 1:
Ich muss schon die ganze Datei einlesen, um mir dann etwas herauszusuchen. Was logisch ist, um die Verschlüsselung aufzuheben. Aber es kostet zu viel Zeit. Denn bei einer 3GB-Datei, aus der ich 50 Bytes ab Offset 40, ist das etwas umständlich.

Problem 2:
Wenn ich mit dem CryptoStream arbeite, ist kein Seek möglich.

Gibt es denn eine andere Möglichkeit eine Datei zu verschlüsseln? Und zwar so, dass ich ganz frei auch wieder Teile auslesen und seeken kann?

27.09.2009 - 11:38 Uhr

Hallo miteinander,

ich benutze in meinem Programm einen TcpClient und darin die Methode BeginConnect, um einmal eine Verbidung zu diesem Server aufzubauen (logisch) und andererseits um festzustellen, ob der Server überhaupt a) verfügbar ist und b) auf diesem Port lauscht.
Desweiteren gibt mir das die Möglichkeit einen Timeout zu setzen. Aber genau an der Stelle hakt es gerade. Mein Code ist folgender:


public bool Connect(string Host, int Port) {
	try {
		_cln = new TcpClient();
		IPAddress[] ips = Dns.GetHostAddresses(Host);
		if(!_cln.BeginConnect(ips[0], Port, Connecting, null).AsyncWaitHandle.WaitOne(3000, true)) {
		// [...]
		}
	// [...]
	} catch {
		// [...]
	}
}

private void Connecting(IAsyncResult ar) {
	// Aufruf nach 30 Sekunden
	if(ar.IsCompleted) {
		_cln.EndConnect(ar);
	}
}

Der Timeout funkioniert auch wie vorgesehen, aber nach ca. 30 Sekunden ruft das Programm dann doch Connecting auf. ar.IsCompleted ist dann true und das Programm versucht einen EndConnect, was in einer Exception endet. Es ist ja auch nicht das Problem die Exception abzufangen, sondern die lange zeit, die das Programm braucht, bis es dahin kommt. Sollte ich in dieser Zeit versuchen einen neuen TcpClient zu erstellen (_cln = new TcpClient(...)), dann endet der Verbindungsaufbau ebenfalls in einer Exception, wenn diese 30 Sekunden noch nicht abgelaufen sind.

Kann man da irgend etwas machen? Vielleicht, dass Connecting gar nicht mehr aufgerufen wird, wenn WaitOne() == false ist?

07.06.2009 - 15:05 Uhr

Danke auf das gleich bin ich gerade auch gekommen ^^

Die Lösung mit dem Byte[] funktioniert super.


MemoryStream ms = new MemoryStream();
Bitmap.Save(ms, ImageFormat.Png);

byte[] bytes = new byte[ms.Length];
ms.Read(bytes, 0, bytes.Length);
...

Falls das jemand mal benötigen sollte.

07.06.2009 - 14:23 Uhr

Ich hänge da schon wieder etwas. Ich habe das ganze nun in einem MemoryStream:


MemoryStream ms = new MemoryStream();
Bitmap.Save(ms, ImageFormat.Png);

Das Problem ist nun, dass ich das ganze eigentlich so verschicke:


NetworkStream ns = new NetworkStream(_Socket);

In diesen Stream serialisiere ich ein Transport-Objekt, das in etwas folgenden Konstruktor hat:


Transporter(string cmd, object Object);

Dem Transporter übergebe ich dann mein Bitmap und füge noch einen Command hinzu, denn ich zwingend benötige. Das ganze wird in serialisiert und über ns verschickt. Wenn ich jetzt aber mein Bitmal in dem ms habe, wie komme ich das ganze dann in oben genannte Form? Kann man vielleicht das Bild beim Save() als String ausgeben? Oder fällt euch zufällig etwas anderes ein?

Ich möchte nicht den ms als Objekt einbinden und das ganze dann erneut serialisieren, wenn es nicht die einige Möglichkeit der Übertragung ist.

Ich bin für Ideen dankbar.

07.06.2009 - 13:12 Uhr

Danke, mir war durchaus bewusst, dass Save auch in einen Stream funktioniert. Allerdings wuste ich nicht, dass das Object dann darin serialisiert wird.

Vielen Dank!

07.06.2009 - 11:54 Uhr

Hallo Leute,

ich würde gerade in einemBitmap-Object das ImageFormat ändern. Ich habe bis jetzt allerdings nur dir Möglichkeit gefunden beim Aufruf von Save() ImageFormat als Parameter anzugeben. Welche Möglichkeiten gibt es noch, um das Format zu ändern? Der Grund dafür ist, dass das Bild (FileSize) kleiner werden soll.

Anmerkung:
Ich brauche diees Object später nicht als Datei, da ich es serialisiere und transferiere. Von daher möchte ich nicht erst das Bild in anderem Format speichern und dann wieder laden.

Habt ihr da eine Idee?

13.04.2009 - 14:53 Uhr

Hallo Leute,

ich habe mal eine Frage fern ab von C#. Ich habe ein Tuturial durchgeackert, in dem es um eigene Betriebssysteme geht. Soweit auch alles gut.

Die Dateien (asm, c und h Dateien) wurde per nasm umgewandelt und später per ld und einer link-Datei zu einer bin dabei konvertiert. Das Problem ist jetzt bei mir, dass ich diese Datei nicht in miner VM starten kann. Im Tutorial wird das mit GRUB gemacht und auf einer Diskette gespeichert. Allerdings wurde am Ende auch ein komplettes GRUB Image mitgeliefert, welches ich problemlos in der VM laden konnte.

Ich würde gerne wissen, wie man nun selbst ein Image erstellen kann, welches diesen Kernel dann schließlich läd.

Habt ihr da eine Idee?

07.03.2009 - 14:01 Uhr

Hallo Community,

ich habe aus einer Klasse alle Properties ausgelesen und generiere anhand derer zur Laufzeit Objekte.
In der Regel ist das Array nach Namen sortiert, allerdings kommt es in 1 von naja... 20 oder 30 Fällen
vor, dass diese Sortierung keine Anwendung findet.

Bisher konnte ich nicht feststellen, woran es liegt. Weiß jemand zufällig, was ein Grund dafür sein könnte,
dass die Reihenfolge sich dort ändert?


PropertyInfo[] attr_temp = _Type.GetProperties();

Sollte es keine feste Sortierung geben, könnte ich das Array natürlich auch selbst sortieren oder gibt es
in den BindungFlags ein Attribut oder etwas mit dem in die Reihenfolge bestimmen kann? (Wenn ja, habe
ich es noch nicht gefunden).

Ich bin für jede Hilfe dankbar.

06.03.2009 - 21:56 Uhr

Hallo Community,

ich habe ein Fenster generiert, welches mit einer Region dargestellt wird.
Diese sieht wie folgt aus:


GraphicsPath gp = new GraphicsPath();
gp.AddLine(10, 0, Width - 11, 0);
gp.AddCurve(new Point[] { new Point(Width - 11, 0), new Point(Width - 4, 3), new Point(Width - 1, 10) }, 0.5F);
gp.AddLine(Width - 1, 10, Width - 1, Height - 11);
gp.AddCurve(new Point[] { new Point(Width - 1, Height - 11), new Point(Width - 4, Height - 3), new Point(Width - 11, Height - 1) }, 0.5F);
gp.AddLine(Width - 11, Height - 1, 10, Height - 1);
gp.AddCurve(new Point[] { new Point(10, Height - 1), new Point(3, Height - 4), new Point(0, Height - 11) }, 0.5F);
gp.AddLine(0, Height - 11, 0, 10);
gp.AddCurve(new Point[] { new Point(0, 10), new Point(3, 3), new Point(10, 0) }, 0.5F);
			
Region = new Region(gp);
gp.Dispose();

Jetzt versuche ich im OnPaint-Event einen Rahmen um die Geschichte zu zeichnen. Allerdings werden alle Kurven nur teilweise, sowie die Linien rechts und unten garnicht dargestellt.
Dieser wird mit dem gleichen GraphicalPath gezeichnet:


GraphicsPath gp = new GraphicsPath();
gp.AddLine(10, 0, Width - 11, 0);
gp.AddCurve(new Point[] { new Point(Width - 11, 0), new Point(Width - 4, 3), new Point(Width - 1, 10) }, 0.5F);
gp.AddLine(Width - 1, 10, Width - 1, Height - 11);
gp.AddCurve(new Point[] { new Point(Width - 1, Height - 11), new Point(Width - 4, Height - 3), new Point(Width - 11, Height - 1) }, 0.5F);
gp.AddLine(Width - 11, Height - 1, 10, Height - 1);
gp.AddCurve(new Point[] { new Point(10, Height - 1), new Point(3, Height - 4), new Point(0, Height - 11) }, 0.5F);
gp.AddLine(0, Height - 11, 0, 10);
gp.AddCurve(new Point[] { new Point(0, 10), new Point(3, 3), new Point(10, 0) }, 0.5F);
			
e.Graphics.DrawPath(Pens.Black, gp);
gp.Dispose();

Könnt ihr mir sagen, wieso die Darstellung falsch ist und was dessen Lösung wäre?

Ich danke im Voraus.

07.02.2009 - 00:29 Uhr

Hallo Community,

in einem ScrollableControl befinden sich bei mir n Controls. Nun möchte ich wissen,
welches Control unter meinem Pointer liegt, wenn ich ein Click durchführe. Allerdings
wird das Click-Event des ScrollableControl nicht ausgeführt, wenn ich in ein Control
klicke, welches ein Chlid des ScrollableControl ist.

Wie kann ich dieses Problem umgehen? Natürlich könnte in jedem Child ein Event
definieren und im ScrollableControl abfangen, wenn es den Focus bekommt. Das könnte
ich denn im ScrollableControl weiterverarbeiten, aber mit der GetChildAtPoint()-Methode
sollte es doch eine schönere Lösung geben, oder?

Vielen Dank im Voraus.

07.02.2009 - 00:22 Uhr

Genau das habe ich auch befürchtet.

Habe das nun auch so umgesetzt, weil jegliche weitere Entwicklung den Aufwand nicht wert ist.

Vielen Dank

06.02.2009 - 10:59 Uhr

Hallo Community,

ich habe ein Problem bei der Convertierung von Datentypen. Um verschiedene Daten in einer Datei zu speichern, habe ich eine Klasse geschrieben, die alle Datentypen in einen String umwandelt und anschließend in die entsprechende Datei schreibt. Beim Laden des Inhalts soll dieser nun wieder zurück in seine Ursprüngliche Form konvertiert werden.

Hierbei bekomme ich einen Fehler. Der Datentyp System.Drawing.Color lässt sich (logischerweise) ohne Probleme ToString() umwandeln. Wenn ich jetzt nun aber mit


// Nur ein Beispiel. Später weiß ich nicht, welcher Type in der Variable steht.
tConvertType = typeof(Color);
Type.GetType(sStringInhalt, tConvertType, false, true);

umwandle, bekomme ich einen Fehler, weil ich "Color [255, 255, 255, 255]" nicht in ein Color-Objekt umwandeln kann.
Was kann ich da machen? Dabei ist mir nicht wichtig, dass gerade die Konvertierung von String zu Color wieder funktioniert. Hierbei ist der Fehler nur das erste Mal aufgetreten.
Wichtiger wäre es zu wissen, wie speichere ich die Information am Bessen ab und wie kann ich diese dann wieder laden?
[Serialisieren fällt leider weg, weil das nicht bei allen Typen gegeben ist.]

Fällt euch dazu etwas ein?

13.11.2007 - 16:28 Uhr

Hallo Leute,

ich möchte gerne einen Button erstellen, dessen Form nicht per default 4-eckig ist. Ich würde gerade in irgend einer Weise die ButtonBase-Klasse benutzen (oder ähnliches) und dazu eine Oberfläche definieren.
(Ich haben icht vor einfach die Paint-Methode zu überschreiben, weil dabei auch die MouseEnter-Methode ausgelöst wird, wenn man noch garnicht auf dem gezeichneten Objekt ist.

Wie kann ich das umsetzen bzw. wie muss ich an die Sache herantreten?

Danke im Voraus.

03.11.2007 - 23:30 Uhr

Ok erst mal vielen Dank.

Ich habe mir der Tutorial angeeignet und ausprobiert...
Aber leider bin ich nicht zum Erfolg gekommen.

Als Beispiel habe ich mir gesagt, dass ein Wort immer bei einem Leerzeichen, am Anfang oder Zeile oder bei einem Semikolon erreicht sein soll und das Ende immer bei Leerzeichen, Ende der Zeile oder einem Semikolon.

Wie müsste ich das in die beiden Regex einsetzen? Ich habe da viel mit rumprobiert, aber leider nichts gefunden, was mir half...

Ich bitte um Hilfe.
Danke im Voraus.

02.11.2007 - 22:04 Uhr

Uhh!

Cool. Aber da hatte ich das nicht her!
Aber das hier ist noch eine Spur besser als das, was ich wohl in abgeänderter Form gefunden hatte.)

Also wenn ich das Ganze \w\b uns \b\w durch ein reines \b ersetze, dann schmeißt der mir einen Fehler. Bei der Auche nach dem Anfang findet


Match m = wordStartRegex.Match(text, index);

nichts und lässt es auf ein stehen.

Bei


m = wordEndRegex.Match(text, wordStart);

das Gleiche und so kommt es mein Substring zum Fehler, da ab Position 1, Länge 1 nach dem ersten Tastendruck (Zeichen "<") kein Zeichen ist.

Woran kann das liegen? Ich habe versucht mich ein bisschen in Regex einzulesen, aber so recht finde ich da nichts, was passen will...

02.11.2007 - 16:39 Uhr

Hallo Leute,

ich benötige mal wieder eure Hilfe!

Ich habe mir eine RichTextBox geschrieben, die Text highlightet. Dazu habe ich mir zur Hilfe ein paar Internetseiten angeguckt und Beispiel-Code kopiert. Jetzt funktioniert es schön bei allen Worten.

Jetzt soll dieses Teil allerdings nicht nur Worte highlighten, sondern Syntax, die ich in einem Hashtable habe.

Meine Regex arbeiten mit:


	// Findet den Wortanfang.
	private static readonly Regex wordStartRegex = new Regex(
		@"\b\w",
		RegexOptions.Compiled | RegexOptions.RightToLeft);

	// Findet das Wortende.
	private static readonly Regex wordEndRegex = new Regex(
		@"\w\b",
		RegexOptions.Compiled);

Wie schon erwähnt, findet dieser Code nur Worte.
Wenn ich nun einen Teil, wie "<?php" so darstellen möchte: **:::

29.06.2007 - 12:14 Uhr

Kurz gesagt:
Ich habe einen Server, der je nach Befehl bestimmte Funktionen ausführen soll. Ich will das allerdings nicht über eine Switch-Funktion steuer, da es immer leicht unübersichtlich wird.
Ich würde gerne einfach Funktionen aufrufen, die so heißen, wie der Befehl, der gesendet wurde und dabei noch Parameter übergeben.

28.06.2007 - 13:20 Uhr

Hallo Leute,

ich habe mal mit einem Ohr gehört, dass ich mit Hilfe von Reflection dynamisch Funktionen aufrufen kann.
Ich stelle mir das nun so vor, dass ich eine Refelction habe und dort einen String mit Funkionsnamen und Parametern hineingebe und die Reflection für mich die Funktion aufruft.

Aber ich konnte bis jetzt weder eine wirkliche Hilfe noch ein Beispiel finden, aus dem mir klar wird, wie das funktioniert und was das ist.

Habt ihr einen Link oder könnt ihr kurz beschreiben was das ist?
Würde auch gerne eure Erfahrungen dazu mal lesen, wie es für euch war damit zu arbeiten oder was ihr damit umgesetzt hat.

30.05.2007 - 07:47 Uhr

Ok,

erst mal vielen Dank! Dieser Ansatz lag natürlich nahe (allerdings bin ich trotzdem nicht drauf gekommen ^^).

Allerdings habe ich jetzt immer noch das Problem, dass ich beim Drücken der Enter-Taste automatisch den Bearbeitungsmodus
verlasse. Das heißt, dass ich immer noch nicht mehr als eine Zeile in das Feld schreiben kann. Sollte diese Zeile jedoch länger
sein, so wird sie umgebrochen.

Hast du da vielleicht noch eine Idee juetho? Oder jmd. anders vielleicht?

Danke im Voraus!

25.05.2007 - 15:27 Uhr

Hallo Community,

ich habe ein Problem bei meiner Entwicklung.
Ich benutze eine DataGridView. Diese füttere ich zuerst mit Columns und später mit Daten. Die Columns werden abhängig
von bestimmen DatenTypen eingefügt. Nun habe ich einen DatenTyp, der es nötig macht, dass ich den einzufügenden
Text in einem MultiLine-TextBox-Objekt einfügen muss. Ich bekomme es aber nicht hin, das editingObjekt zu verändern
oder eine TextBox dort hinzuzufügen, so dass ich es benutzen kann.

Wie kann ich das so einrichten, dass mein editingObjekt multilined Darstellung hat?

16.05.2007 - 12:59 Uhr

Hallo Leute,

ich habe ein Problem oder viel mehr suche ich eine accuratere Lösung für meinen Cursor.

Ich will in einem Objekt der Klasse Dokument beim Speichern den Cursor verändern. Dies will ich allerdings in der SpeicherRoutine machen ohne die Form zu übergeben.

Diese Klasse kennt aber (logischerweise) keinen Cursor.

Besteht die Möglichkeit den Cursor Applikation-Weit (Apllication.Cursor <-- so ähnlich zu ändern), so dass ich auch von einer anderen Klasse drauf zugreifen kann?

27.04.2007 - 08:21 Uhr

hallo Leute,

der Drucker lässt mich immer noch nicht in Ruhe ^^

ich habe einen Text, den ich nur über eine bestimmte Länge drucken will. Die Anzahl der Reihen ist egal.

Hier erst mal mein Code:


int MaxLen = line.Width;
Size fSize;
int intChars, intLines;
StringFormat stringFormat = new StringFormat();
stringFormat.Trimming = StringTrimming.Word;
fSize = new Size(MaxLen, 20);
float calcWidth = g.MeasureString(Ware[2], line.SendFont).Width;
while(calcWidth > MaxLen)
{
    g.MeasureString(Ware[2], line.SendFont, fSize, stringFormat, out intChars, out intLines);
    Out += Ware[2].Substring(0,intChars)+"\r\n";
    Ware[2] = Ware[2].Substring(intChars);
}
Out += Ware[2];

Das funktioniert auch fast so, wie ich will. MaxLen ist die Angabe der Länge in Pixel.
calcWidth sollte die tatsächliche Länge des Textes sein. Die Schleife wird auch in der Richtigen Anzahl durchlaufen,
aber der Rückgabewert intChars, der angeben soll wie viele Zeichen ich nehmen kann, gibt so viele Zeichen zurück,
dass in den weiteren Druchläufen keinen Zeichen mehr da sind und der Text zu lang ist.

Wieso ist das so? Und was muss ich ändern?

Info:
Wenn ich die MaxLen durch 2 teile, dann kann ich einen Effekt erkennen, allerdings passt das dann nicht so, wie ich das möchte, aber der Text wird geteilt.

27.04.2007 - 08:12 Uhr

Alles klar vielen Danke, Bernd!

Dann weiß ich ja jetzt, was ich zu tun habe ^^

Grüße zurück.

26.04.2007 - 15:15 Uhr

Hallo nin,

ich weiß gerade nicht was du meinst.

Ich Rufe den printDialog auf und anschließend rufe ich printDocument.Print() auf.
Dazwischen würde ich dann gerne die Anzahl haben.

@nis: Im Gallileo Computing wird das als Möglichkeit dargestellt die seitenanzahl zu erfahren...

26.04.2007 - 14:25 Uhr

Hallo Leute,

ich habe ein Problem beim Drucken. Ich habe ei Dokument, das x Seiten lang ist. Auf jeder Seite soll unten stehen: Seite x / n

ich bekomme aber nicht die Anzahl der Seiten heraus.
Ich habe ich mit dem Aufruf eines printDialogs versucht. und dort


anzahlSeiten = printDialog1.PrinterSettings.MaximumPage;

Dies liefert aber nur die beeindruckende Rückgabe 9999.
Und ich habe gerade 1 oder vielleicht 2 Seiten...

Wie bekomme ich beim Drucken die Anzahl der Seiten heraus?

21.04.2007 - 23:06 Uhr

Ok. Ich habe das einfach so gelöst, dass ich beim Verschlüsseln die Anzahl der Objekte an den Anfang der Datei schreibe. Dann kann ich eine For-Schleife laufen lassen.

Trotzdem: Vielen Dank! ^^

21.04.2007 - 22:37 Uhr

Ok das könnte klappen, aber sehe ich das richtig, dass ich dann

aus FileStream einen CryptStream,
aus CryptStream einen StreamReader,
aus StreamReader ein Byte-Array und
aus Byte-Array einen MemoryStream

mache?

Geht das nicht einfacher?

Nachtrag:

Habe das mal ausprobiert: Das gibt beim Deserialize einen Fehler, der Stream ist dann unlesbar...

21.04.2007 - 17:39 Uhr

Nein das tue ich nicht, dass macht Deserialize(cryptoStream), so dass ich danach beim nächsten Aufruf der Funktion das nächste Objekt bekomme und nicht wieder das selbe.

Seek wird vom CryptoStream nicht unterstützt. Was kann ich da dann machen? Ich habe keine Möglichkeit zu erfahen, wo ich mich gerade in der Datei befinde.

21.04.2007 - 17:05 Uhr

Hallo Leute,

ich habe ein Problem mit meinem CryptoStream. Ich habe eine Datei erfolgreich verschlüsselt geschrieben ( Der inhalt sind serialisierte Objekte). Wenn ich diese Datei nun mit einem FileStream öffne und diesen Dann an einen CryptoStream übergebe, kann ich das Spielchen nicht auslesen, weil ich dort nicht die die Länge oder die Position auslesen kann ( bei Versuch -> Fehler).

Ich Deserialisiere meine Objekte, indem ich den Stream solange durchlaufe, bis er am Ende ist. Das geht aber nicht.

Was kann ich tun?

Nachtrag:
Ichh abe es geschafft ein Objekt zu deserialisieren. Das Problem ist jetzt noch, dass in der Datei x Objekte sein können. Ohne Den Crypt habe ich immer:


while(fs.Position < fs.Length)
{
    // ...Mein Code!
}

So werden alle Objekte deserialisiert.

Aber wie sieht das jetzt aus? Ich kann in diesem Stream die Position nicht abfragen...

16.04.2007 - 14:36 Uhr

LOL...

Ich hatte wohl gerade ein ...kA

Vielen Danke. Vielleicht sollten wir diesen Thread einfach... verstecken???

^^

16.04.2007 - 14:27 Uhr

Hallo Leute,

ich habe mit ein ScrollableControl auf meine Form gelegt und dort n Objekte in den Container gepackt.
Wenn ich das Attribut AutoScroll auf true stelle, so kann ich auch scrollen...

Jetzt sind meine n Onjekte jedoch alle jeweils x Pixel hoch ( es soll nut Vertikal gescrollt werden) wenn
ich ein Mal auf einen Scrollbutten drücke, verschieben sich die Objekte aber nur um viellecht 1 - 3px.
Wie kann ich dem Objekt sagen, um wie viele Pixel das Control bei LargeChange- und SmallChange verschieben soll?

Vielen Dank im Voraus.

11.04.2007 - 22:27 Uhr

Hallo,

also um die allgemeine Verwirrung ein bisschen klarer zu gestalten:
Ich habe ein Basisprogramm. In dieses Basisprogramm kann ich verschiedene Module (UserControls) einspielen. Diese sind alle in einer DLL gespeichert. Das Programm soll die DLL auslesen und alle UserControls finden. Das tut es auch. Jetzt soll es danach von jedem UserControl ein Objekt anlegen. Auf diese Objekte kann der Benutzer dann anschließend zugreifen.

So und alle diese UnerControls haben alle einen Contructor ohne Parameter. Ich brauche nur von jedem UserControl ein Objekt.

Nachtrag:
So ich habe gerade mal Activatior.CreateInstance() getestet. Das geht so weit. Aber ich bekomme nur ein Objekt zurück. Wie kann ich nun dieses Objekt in die entsprechende Klasse casten?
Alle UserControls beinhalten die public Attribute ClassName und Description. Wie kann ich darauf zugreifen, wenn ich nur ein Objekt habe? Diese beiden Dinge müsste ich noch wissen ^^

Danke im Voraus.

11.04.2007 - 08:46 Uhr

Vielen Danke.

Hierbei bekomme ich dann alle Klassen, die das ganze Assembly bietet. Diese habe ich dann über


Assemby ass = Assembly.GetCallingAssembly();
foreach(Type t = ass.GetTypes())
{
    if(t.Namespace = "xxx")
    {
        //... Code ...
    }
}

die benötigten Klassen gefiltert. Geht dies auch irgendwie anders? Alles was ich brauche sind die UserControl-Klassen.

Zudem habe ich noch ein Problem:
ich kann aus dem Type t keine Instance erstellen. Ich habe ein Beispiel mit einem Interface PlugIn gefunden, da aber nicht so ganz durchgeblickt. Könnt ihr mir 'nen Tipp geben, wie ich aus dem Type ein Objekt erstelle?

10.04.2007 - 16:32 Uhr

Nein Stopp.

Missverständniss!
Ich will zunächst keine DLL laden.
Ich habe einen NameSpace im projekt selbst und aus dem will ich alle Klassen anzeigen lassen.

Die DLL-Geschichte soll erst später oder garnicht kommen.

^^

Danke im Voraus