Laden...

Forenbeiträge von Console32 Ingesamt 258 Beiträge

17.01.2013 - 11:11 Uhr

Resharper kann auch das soweit ich weiß,
Rechtsklick auf deine Solution => "Find Code Issues" dann sollte es eine punkte mit unused code geben

16.01.2013 - 14:08 Uhr

Nun kann es ja durchaus mal vorkommen, dass sich die WPF Anwendung aufhängt oder abstürzt.

Ich finde den Ansatz nicht besonders benutzerfreundlich.
Ein Ordentliches und Sinngemäßes Exceptionhandling quer durch die Applikation sollte einen Großteil der Abstürze verhindern und richtig mit dem aufgetretenen Fehler umgehen.

Wenn du dich an die Microsoft Richtlinie hältst und alle Aktionen die länger als 20ms dauern in einen separaten Thread packst, wird es auch so gut wie niemals dazu kommen das dein GUI Thread sich aufhängt. Somit tretten viele dieser aufhänger nicht im GUI Thread auf und du kannst nicht überprüfen ob die Applikation noch reagiert.

Gegen Deadlocks, Endlosschleifen und Race-Conditions hilft nur ausgiebiges Testen und eine gut durchdachte Synchronisation zwischen Threads usw..

Du kannst natürlich für den WorstCase über die Main methode einen TryCatch block packen der alles auffängt was nicht bedacht wurde, und an dieser stelle die Application neu starten. Jedoch sollte das nicht die Regel sein.

BTW Ich kenne den Einstigspunkt bei WPF nicht wird sich von WinForms unterscheiden.

16.01.2013 - 10:00 Uhr

Ich kenne den FIR Filter anders, aber gut so wie es auf deinem Bild aussieht kannst du das ganze vereinfachen wenn du die Mittlere Linie Quasi hinten anhängst.

Formelmäßig bedeutet das das du die Koeffizienten in verkehrter Reihenfolge hinten anhängst (bis auf den letzten Koeffizienten)
dann bist du bei einem ganz normalen FIR (so wie auch auf Wikipedia beschreiben für den der Algorythmus wie folgt funktioniert:


             for (int i = 0; i < b_fir.Length; i++)
            {
                for(int y = i; y >= 0; y--)
                {
                    result[i] += input[y] * b_fir[i - y];
                }
            }

Ich hoffe ich habe keinen Denkfehler beim vereinfachen

EDIT: Ich bin mal davon ausgegangen das es nur soviel Eingangswerte gibt wie es Koeffizienten gibt die formal kann jedoch leicht auf mehr Eingangswerte geändert werden.

15.01.2013 - 11:05 Uhr

Da ich nichts anderes sehe gehe ich davon aus das du die Methode im MainThread aufrufst.

Warum sollte dieser warten wenn er mit allem fertig ist, wenn du ihm nicht sagst auf was er warten soll.

Du kannst den MainThread mithilfe eines ManualResetEvents anhalten bis dein FileComplete event 10000 aufgetreten ist.

15.01.2013 - 10:40 Uhr

Hallo duploNation,

wie schon in der PM Geschrieben handelt es sich hierbei um Grundlagen bitte beachte in Zukunft: [Hinweis] Wie poste ich richtig? Punkt 1.1.1 und 2.1

Es gibt sehr viele Möglichkeiten eine Datenbank an C# anzubinden.
Eine davon ist mit MySqlConnection und einem MySqlDataReader die einzellnen Einträge auszulesen und diese einem Dictionary<int,string> hinzuzufügen.

Wie du diese dinge auf einer TextBox anzeigst ist ein total grundlegendes Problem.
Wie ich schon per PN geschrieben habe solltest du dich in die Grundlagen einlesen.

Ressourcen für Grundlagen gibt es Genug (siehe auch link Oben)
Auch Google spuckt bei MySql + C# / MySqlConnection / MySqlDataReader einiges aus.

15.01.2013 - 08:58 Uhr

Ich denke das liegt daran das der Konstruktor deiner Klasse über den Xaml Parser aufgerufen wird. Dieser enthält einen catch block und wirft dann eine neue Exception mit deiner Exception als InnerException deswegen ist die Quelle nicht verfügbar.

EDIT: Ist aber ungewöhnlich Code in dem Window Konstruktor zu packen.
bzw auch Exceptions bei Parameterlosen Konstruktoren finde ich nicht sinnvoll (MMN)

15.01.2013 - 08:27 Uhr

Deine erste Exception kommt nicht von der Fehlerverursachenden Methode sondern dein Xaml des Mainwindows ist fehlerhaft...

11.01.2013 - 10:22 Uhr

die verwendete Add methode der ParameterCollection ist als Obsolete gekennzeichnet.

[ObsoleteAttribute("Add(String parameterName, Object value) has been deprecated.  Use AddWithValue(String parameterName, Object value).  http://go.microsoft.com/fwlink/?linkid=14202", 
	false)]
public SqlParameter Add(
	string parameterName,
	Object value
)

Versuch mal AddWithValue

Edit: natürlich nur die verwendete Add-Methode und nicht alle Add-Methoden...
Edit 2:

BTW:

SqlConnection sqlConnection = new SqlConnection(sqlConnectionString);
    using (sqlConnection)
    {

Kann zu einer ObjectDispose Exception führen wenn du nach dem using block auf die connection zugreifst.

using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))
11.01.2013 - 09:06 Uhr
static void Main()
        {
            List<Row> table = new List<Row> 
            { 
                new Row() { Addresse = "Zuhause", Age =5, Name = "Hans" }
                new Row() { Addresse = "Birkenweg 2", Age = 32, Name = "Max Musterman"}
                new Row() { Addresse = "Am See 15", Age = 15, Name = "Thomas" }
            };

            var tableByAddress = table.OrderBy(keySelector => keySelector.Addresse);
            var tableByName = table.OrderBy(keySelector => keySelector.Name);
            var tableBayAge = table.OrderBy(keySelector => keySelector.Age);

        }

        public class Row
        {
            string name;
            int age;
            string addresse;

            public string Name
            {
                get { return name; }
                set { name = value; }
            }

            public string Addresse
            {
                get { return addresse; }
                set { addresse = value; }
            }

            public int Age
            {
                get { return age; }
                set { age = value; }
            }
        }

auch eine Möglichkeit

Das sind jedoch Grundlagen die hier im Forum vorausgesetzt werde, bitte beachte:
[Hinweis] Wie poste ich richtig? Punkt 1.1.1

09.01.2013 - 15:48 Uhr

BTW:

Das close ist überflüssig und wird im sr.Dispose() / durch das using aufgerufen.

Die Dispose methode von StreamReader:


protected override void Dispose(bool disposing)
{
	try
	{
		if (this.Closable && disposing && this.stream != null)
		{
			this.stream.Close();
		}
	}
	finally
	{
		....
	}
}
08.01.2013 - 14:24 Uhr

Mir ist noch immer nicht klar warum es zwei Klassen mit dem namen Person geben soll, du versuchst das gleiche Ding mit verschiedenen Klassen zu beschreiben ohne das diese in irgendeiner Vererbungshierarchie definiert sind.

Leider kann man mit dem Beispiel nicht wirklich sehen was für Architektur du aufbauen willst.
So wie du geschrieben hast klingt es als würdest du eine alte Klasse neu schreiben weil sie nicht mehr so wie früher verwendet werden kann. Ich würde davon abraten mehrere Personenklassen ohne eine Relation zueinander zu haben da es nicht möglich ist zu sehen warum sich diese Unterscheiden.Vor allem gibt der Namespace keine Information darüber was sich geändert hat oder wo welche Person zum Einsatz kommen soll.

Ich würde generell noch einmal überdenken ob es nicht eine sinnvollere Möglichkeit gibt die Daten zu Organisieren.

Wenn die Namen jedoch so bleiben sollen bleibt dir sowieso nichts übrig außer mit Namspaces & Alias zu arbeiten.

08.01.2013 - 13:06 Uhr

Du solltest die Klassen eindeutig benennen wenn Mutter und Vater nicht von der Selben Person Klasse sein können, sollte diese nicht Person heißen:

Versuche deinen Klassen eindeutige Namen zu geben die deren zweck und Daten richtig beschreiben. Falls es doch noch vorkommt das Klassen den Gleichen namen Tragen kannst du sie in unterschiedliche Namespaces legen. Und mit einem Alias ansprechen um das ganze noch übersichtlich zu halten. (siehe vorpost)

Ich denke das dein Code hier nur ein Beispiel ist (bitte korrigiere mich wenn nicht) somit kann ich dir kein konkretes Beispiel geben wie man es anders machen könnte.

07.01.2013 - 15:05 Uhr

Das ist eine sehr magere Lösung für dein Problem.

Die Statische variable wird bestimmt nicht null nur weil du irgendwo ein Fenster schließt. Dein Problem lag definitiv wo anderes. Ich vermute mal du verwendest eine Variable deines Geschlossenen Fensters weiter.

Falls du doch die Globale Variable auf null setzt, kannst du diese mit readonly:

public  static readonly HFI_Appl myApplication = new HFI_Appl();

vor einer Neuzuweisung "schützen".

OT:
Eine vernünftige Namensgebung macht das Lesen für alle leichter 😉

21.12.2012 - 10:59 Uhr

Das kommt auf das Protokoll / den Handshake an.

Bei mir funktioniert es grundsätzlich den Stecker zu ziehen und wieder anzustecken.
Jedoch musst du die Kommunikation des Messgerätes und deines Programms auch dafür auslegen solche Fehler (Timouts & fehlerhafte Pakete) zu Ignorieren, was bei mir nicht so ist. Wird ein fehlerhaftes Paket nicht mehr Quittiert trennt (in meinem Fall) die Steuerung die Verbindung. Dh. Das ausstecken würde nur funktioniert wenn die Verbindung gerade inaktiv ist. Deswegen trenne ich die Verbindung Immer wenn ein Timeout auftritt.

20.12.2012 - 12:51 Uhr

Hallo herbivore,

das ist natürlich Richtig, war ein Problem der PictureBox.
Besser gesagt meiner PictureBox (Ist mir leider zu spät aufgefallen), Ich verwende jetzt wieder die .Net PictureBox. Diese Zeichnet sich auch Richtig.

Die Transparenz funktioniert weil das UserControl ein ContainerControl ist, und sich nur ein Teil (besser gesagt der Teil auf dem keine Controls liegen müssen) des UserControls ständig neu Zeichnet.

19.12.2012 - 10:00 Uhr

Hallo Community,

Ich habe ein Control das viel selber zeichnet,
Alles im OnPaint und per Invalidate bei Property änderung.

Nun habe ich das Problem das vor diesem Control eine PictureBox ist welche ein Fadenkreuz enthält, leider verschwindet dieses nach starten des Fensters, und ist erst sichtbar wenn ich das Fenster aus dem Desktop schiebe / das form sich neu zeichnet...

Ich dachte bis jetzt das ich im OnPaint nicht darauf achten muss ob andere Controls den Bereich überdecken?

27.11.2012 - 16:12 Uhr

Also das aktivieren erfolgt in einem Button_Click Handler, und das deaktivieren erfolgt in dem Event meines BackgroundWorkers (per Invoke)
somit sind beide aufrufe im GUI-Thread welcher danach weder Blockiert wird noch sonst irgend etwas macht da ich ja nicht einmal die Maus bewege

Ich habe auch niemals gesagt das ich DoEvents verwende, auch wenn es indirekt durch das ShowDialog aufgerufen wird (wobei ich die Anforderung das wir Steinzeitliche Modale Fenster verwenden nicht ändern kann).

Wenn es am DoEvents der ShowDialog Methode liegt, kann ich das auch nicht ändern. (Dann ist es meiner Meinung nach immer noch ein Bug, weil nirgendwo steht das UseWaitCursor mit Modalen Fenstern nicht richtig funktioniert)

Edit es heißt natürlich ShowDialog..

27.11.2012 - 15:43 Uhr

Ja die Neuzuweisung der Position bringt das gewünschte Ergebnis,
Ich denke mal das es sich dabei um einen kleinen Bug im Framework handelt oder?

Kann mir nicht vorstellen das es irgendwo gewünscht ist auf eine Mausbewegung zu warten.

27.11.2012 - 15:16 Uhr

Hallo Community,

ich habe ein Problem in einem Form.
Nach dem drücken eines Buttons läuft eine (möglicherweise) sehr aufwändige Aktion im Hintergrund ab. Beim Drücken setzte ich Application.UseWaitCursor auf true.

Nach dessen Finished / EncounterdError Event setzte ich diese wieder zurück,
nur leider übernimmt dieser die Aktion nicht bis ich die Maus bewege.
Der WaitCursor bleibt..

An andere stelle im Programm verwende ich UseWaitCursor sehr ähnlich (gleichen Events meiner WorkerKlasse) dort funktioniert es einwandfrei.

Muss ich irgend etwas machen damit sich der Cursor neu zeichnet /
kennt jemand das Problem?

08.11.2012 - 12:18 Uhr

da du deine Steuerelemnte des Basisforms im designer erstellt hast sind diese per defaul private. Somit kannst du natürlich vom Childform nicht darauf zugreifen.

EDIT:
Die Property im designer heißt "Modifiers" und kann ohne Probleme auf protected geändert werden.

24.10.2012 - 15:47 Uhr

Ich würde pro Variable einfach einen Zufallswert Generieren(von 1 bis 10000 zb) diese dann in eine Liste Werfen und nach der Zufallszahl sortieren. Somit muss du nicht warten bis dein Random die Richtige zahl liefert.


        public static List<string> Shuffle(List<string> words)
        {
            Random random = new Random();

            return words.Select(selector => new { Word = selector, Key = random.Next(10000) })
                .OrderBy(keySelector => keySelector.Key)
                .Select(resultSelector => resultSelector.Word).ToList();
        }

EDIT: Kannst du natürlich auch als Generische erweiterungsmethode für alle IEnumerables machen


public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> target)
        {
            Random random = new Random();

            return  target.Select(selector => new { Word = selector, Key = random.Next(10000) })
                .OrderBy(keySelector => keySelector.Key)
                .Select(resultSelector => resultSelector.Word);
        }

17.10.2012 - 17:08 Uhr

du kannst dazu einfach nach dem Property Gruppieren und dann das Distinct verwenden.

..Anstelle des Distincts Gruppieren und die erste Gruppe verwenden (dannach ist kein Distinct mehr nötig):

.GroupBy(e.Row[Auftragsnummer]).First()
15.10.2012 - 17:58 Uhr

Das simple Distinct ist eine Erweiterungs methode die auf listen und arrays ausgeführt werden kann.


                List<ShapeData> listWithDuplicates = GenerateShapeData();
                List<ShapeData> listWithoutDuplicates = listWithDuplicates.Distinct().ToList();
12.10.2012 - 12:37 Uhr

Hallo,

Dictionarys solltest du verwenden wenn du die SuchPerformance auch brauchst (davon ist in deinem Beitrag leider nichts zu lesen) Oder ob du ständig neue daten einfügst, entfernst, viel mit Index arbeites, etc etc,

Über die strings zur HashKey berechnung würde ich mir einfach keine Gedanken machen. "Premature optimization is the root of all evil"

Welche Datenstruktur du für dein Anliegen verwendest sollte an der Verwendung beurteilt werden und nicht an den Daten selbst. Wenn es nur darum geht das die Elemente nach dem befüllen einmalig sind würde ein Simples Distinct mit einer Liste reichen.

12.10.2012 - 10:53 Uhr

Die meldung sagt dir das sich deine anonyme Klasse nicht vergleichern lässt,
auch dadurch das die DataTable nur Objekte enthält, ist nicht klar wie vergleichen werden soll.

Versuch den Typ bei deiner Anonymen Klasse fest zu legen.

P.S. Mouseover "var" sollte dir anzeigen was für typ es ist.

EDIT: wenn deine format yyyyMMdd ist kannst du auch eine string order machen (wenn MM => 01 ist natürlich)

12.10.2012 - 09:13 Uhr

Of Topic:
spar dir lieber die if abfrage und gib deine Methode einfach den schon vorhandenen bool mit.

this.ProgrammClose(!login)
09.10.2012 - 12:29 Uhr

In dem speziellen fall von tosk ist die reihenfolge anders aber im normalfall ist es,

ARGB und RGB bzw:
aarrggbb und rrggbb.

09.10.2012 - 11:12 Uhr

Stimmt mein fehler, nur bei Ressourcen / Texten ist es möglich einen kommentar einzufügen.

EDIT: Also doch, habs nur auf die schnelle nicht gefunden.

09.10.2012 - 10:51 Uhr

Es gibt im Settings Designer eine Spalte "Description" diese werden auch in das XML mit übernommen

09.10.2012 - 10:05 Uhr

#8BFF0000 = Blasses Rot = #FF7164

Das 8 - stellige Beispiel hier ist volles Rot mit alpha Wert
und das 6 - stellige ist Rot mit anderen Farben vermischt um auf blasserers Rot zu kommen.

nur weil das Alpha Rot auf einem bestimmten Hintergrund so aussieht wie das RGB Rot, sind diese noch lange nicht gleich. Das du bei der Transformation den Alphawert verlierst sollte jeoch klar sein.

09.10.2012 - 09:53 Uhr

Das ist doch genau das verhalten das auch die MSDN beschreibt.

Du erstellst in deiner Application ein Callback/Delegate und übergibst es dann an native/unmanged Code. Dadurch vierliert deine Application die Referenz darauf und der GC räumt dein Delegate auf. Wenn der unmanaged Code dann deine Callback ausführt kommt es zur genannten Exception.

Die lösung dazu ist das du alle Delegates die du an unmanaged Code übergibst als Referenz behalten musst.

Leider kann ich dir nicht sagen welches delegate es ist dazu ist es zuviel Code.

P.S.:

this.btn_openfile_thread = new Thread(new ThreadStart(this.ThreadProcSafe));

den Thread kannst du dir Sparen wenn du mit BeginInvoke arbeitest.

this.BeginInvoke(new Action(() => this.btn_openfile.Enabled = true));

P.P.S.:
eine sprechende Namensgebung hilft auch weiter wenn dir jemand helfen will

09.10.2012 - 09:21 Uhr

Ich denke dein Problem ist das Environment.Exit().
Versuche einfach mal vor dem Environment.Exit das du deinen Timer Disposed.

Oder tritt das Problem auch auf wenn du nicht auf den button2 drückst?

Und bitte kopier nicht deine kompletten source files ins forum das hilft niemandem weiter (schon garnicht das designer file)

05.10.2012 - 13:05 Uhr

DataReceived verwendet eigene Threads aus dem Threadpool, daher unterbrechen sie nie GUI Threads,

DataReceived wird Gefeuert wenn mindestens ein Byte vorhanden ist können aber durchaus mehr sein.

Wenn der Thread des DataReceived Events noch nicht zum Thread Pool zurückgekehrt ist wird soweit ich weiß das nächste DataReceived erst nach dessen Rückkehr zum Threadpool gefeuert. dh der DataReceivedEventHandler wird synchron ausgeführt.

Je nach dem welchen FiFo du nimmst kannst du in der Doku nochlesen ob und welche Mehtoden Threadsicher sind.

EDIT: ein guter Link zu dem Thema
Top 5 SerialPort Tips [Kim Hamilton]

04.10.2012 - 17:11 Uhr

Danke mit dem SerialPort.ReadTimeout funktioniert es einwandfrei auch auf älteren System.

Die Kommunikation habe ich natürlich mit einem Sniffer überwacht 😉

03.10.2012 - 14:17 Uhr

Hallo,

Ich weiß nicht wie das bei WPF ist, jedoch denke ich das es ähnlich dem WinForm verhalten sein wird:

Wenn du ein Form mit WindowStyle.None auf ein anderes Fenster "Klebst" merkt man sehr wohl das es sich um ein eigenen Fenster handelt da das MainWindow den fokus verliert und seine Titelleiste ausgraut.

Man kann das zwar umgehen wenn man die NC_ACTIVATE Message vom ChildWindow ans MainWindow weiterleitet, schön ist das jedoch nicht.

02.10.2012 - 15:08 Uhr

Ich bump den Thread mal leider besteht das Problem immer noch.

26.09.2012 - 14:45 Uhr

Wieso denkst du das dein Eventhandler überhaupt ausgeführt wird wenn du ihn 2 Zeilen später wieder aushängst.

{
            if (FileInfo.Extension.ToLower() == ".png" ||
                FileInfo.Extension.ToLower() == ".bmp" ||
                FileInfo.Extension.ToLower() == ".jpg" ||
                FileInfo.Extension.ToLower() == ".jpeg")
            {
                PrintDocument _imagePrintDocument = new PrintDocument();
                _imagePrintDocument.DocumentName = FileInfo.FullName;
                _imagePrintDocument.PrintPage += new PrintPageEventHandler(_imagePrintDocument_PrintPage);
                _imagePrintDocument.EndPrint += new PrintEventHandler(_imagePrintDocument_EndPrint);
                _imagePrintDocument.Print();
            }
        }

        static void _imagePrintDocument_EndPrint(object sender, PrintEventArgs e)
        {
            PrintDocument imagePrintDocument = sender as PrintDocument;
            imagePrintDocument.PrintPage -= new PrintPageEventHandler(_imagePrintDocument_PrintPage);
            imagePrintDocument.EndPrint -= new PrintEventHandler(_imagePrintDocument_EndPrint);
            imagePrintDocument.Dispose();
        }

        static void _imagePrintDocument_PrintPage(object sender, PrintPageEventArgs e)
        {
            Image _image = Image.FromFile((sender as PrintDocument).DocumentName);
            e.Graphics.DrawImage(_image, new System.Drawing.Rectangle(new System.Drawing.Point(0, 0), new Size(_image.Width, _image.Height)));
        }

26.09.2012 - 09:35 Uhr

string.Equals oder ==

bei "nur" mehreren tausend zeichen würde ich mir um Performance keine gedanken machen

24.09.2012 - 14:46 Uhr

Entschuldigt bitte den doppelpost habe vorher überlesen das du explizit eine Parameter übergabe willst:


            string text = (string)this.Invoke(new Func<int, int, string>((factor1, factor2) =>
            {
                int result = factor1 * factor2;
                return result.ToString();
            }));

so könnte das ganze aussehen mit anonymer methode und parametern.
wenn du keinen rückgabewert hast verwendest du eine Action anstelle der Func.

Soll nur ein Beispiel sein, der Invoke macht so natürlich absolut keinen sinn

24.09.2012 - 14:16 Uhr

Du kannst dem Invoke keine Lambda expression übergeben (zumindest meinem Compiler nicht)

aber dem Action-ctor kann man eine lambda expression übergeben / eine anonyme methode schreiben.


            this.Invoke(new Action(() => MessageBox.Show("TEST")));

            this.Invoke(new Func<string, DialogResult>(MessageBox.Show), "TEST");

            this.Invoke(new Action(() =>
            {
                //Anonoyme methode hier...
                //Parameter übergeben spart man sich hier eigentlich da man sowieso zugriff auf die lokalen variablen der funktion hat.
            }));

was du auf alle fälle nicht machen muss ist das new object[] weil Invoke die Parameter über den param tag entgegen nimmt.

EDIT: Der link im anfangs Post funktioniert bei mir nicht..

24.09.2012 - 11:09 Uhr

Ich habe auch nicht gesagt das es unmöglich ist, nur das es vielleicht nicht dafür gedacht ist.

Aber du hast recht es muss gehen, denn wenn ich ein neues WinForms Projekt erstelle und die beiden Optionen einstelle geht es ohne Probleme.

Der eigentliche Punkt in meinem Beitrag war jedoch das du (auch wenn die Standard Buttons ausgeblendet sind) das zeichnen deiner eigenen Buttons nur per p/invoke realisieren kannst.

24.09.2012 - 10:26 Uhr

Hallo Markus,

leider kann ich dein Bild in der arbeit nicht aufmachen, hoffentlich habe ich es auch so richtig verstanden.

Die Non-Client-Area zeichnet dir windows (also titelleiste und auch die Buttons die du ansprichst). Das heißt in c# direkt kannst du nicht daruf zugreifen / diese selbst zeichnen.

Das ganze funktioniert nur per p/Invoke und ist nicht ganz so einfach.
Drawing Custom Borders in Windows Forms
Einfach nach Non Client Area Drawing googlen.

Warum FormBoarderStyle.FixedToolWindow und ControlBox nicht funtkionieren kann ich dir nicht sagen, wahrscheinlich ist ein FixedToolWindow nicht dazu gedacht die Close/Minimize Buttons auszublenden.

12.09.2012 - 12:30 Uhr

Hallo,

entschuldigt die späte Antwort das Projekt wurde für ein Monat auf Eis gelegt.

Ich frage jetzt mittels EnumWindows auf einen bestimmten Klassennamen ab (Welchen ich zuvor durch Spy++ gefunden habe).

        public bool EnumWindowsCallBack(IntPtr hWnd, IntPtr lParam)
        {
            StringBuilder windowClassName = new StringBuilder();
            GetClassName(hWnd, windowClassName, windowClassName.EnsureCapacity(128));
            if (windowClassName.ToString() == "KlassenName")
            {
                //Messagebox mit Fehler gefunden
                return false;
            }
            return true;
        }

Je nach dem wie ich den Timer einstelle, verschwindet das Fenster eben schneller oder langsammer.

Wirklich schön ist das zwar nicht aber es erfüllt im moment seinen Zweck.

Nun habe ich noch eine Frage zum Hook:

Lässt es sich damit definitiv verhindern das eine MessageBox angezeigt wird?
Und wie viel Aufwand ist es einen Hook zu diesem Problem zurealisieren (ca.)?

10.09.2012 - 08:48 Uhr

Das sollte mit der WinApi gehen

vielleicht hilft dir der artikel weiter Drag and Drop on a Tray Icon.

05.09.2012 - 09:09 Uhr

Du kannst auch mit dem Validating event Arbeiten,


        void comboBoxTest_Validating(object sender, CancelEventArgs e)
        {
            e.Cancel = DialogResult.OK != MessageBox.Show(text, title, MessageBoxButtons.YesNo, MessageBoxIcon.Question);
        }

        void comboBoxTest_Validated(object sender, EventArgs e)
        {
             // user pressed yes
        }

dabei bleibt der focus solange auf der comboBox bis man okay drückt

Edit:
leider wird jedoch der index nicht wieder zurückgestellt so wie am Anfang geschrieben.
und das event wird leider auch nicht ausgelöst wenn man ein item anwählt sondern erst wenn man die Combobox Verlässt somit ist diese lösung nicht wirklich brauchbar

am einfachsten ist jedoch einfach in jedem selectedIndexChanged event den index fürs nächste mal zu speichern.

31.08.2012 - 13:58 Uhr

Data received wird aufgerufen wenn auch wirklich daten an der seriellen schnittstelle ankommen. (Event basierend nicht sequenziell)

was Rabban meinte war ob diese Methode auch überhaupt einmal aufgerufen wird.

wenn du nämlich den port zu machst kannst du nichts mehr lesen / das event wird nicht mehr ausgelöst.

30.08.2012 - 15:52 Uhr

jedoch entsteht durch das Überblendmodul nicht der Eindruck, dass alles abgeschmiert wäre

Hilft dir jetzt bei deinem Problem nicht weiter aber wieso denkst du das es besser ist das Control einfach zu überblenden ?

Also wenn ein programm bei mir für 5 sekunden ein starres overlay anzeigt entsteht genauso der eindruck das alles abgeschmirt ist. Warum teilst du dem User nicht einfach mit wie weit deine Verarbeitung ist und sperrst die Controls einfach per Enabled = false;

27.08.2012 - 15:33 Uhr

Warum einfach wenns auch Kompliziert geht.

Ein simples ClearUndo() löscht den Buffer somit ist es nichtmehr möglich den gesperrten text zu löschen.

Kann geschlossen werden.

P.S. Entschuldigung für den neuen Thread