Laden...

Forenbeiträge von Console32 Ingesamt 258 Beiträge

12.10.2017 - 13:19 Uhr

Seit VS 2015 gibt es rechts oben das suchfeld Quick Launch (mit CTRL Q). Dannach kannst du einfach Collapse eingeben und siehst welchen shortcut es dafür gibt: Siehe Anhang

09.10.2017 - 16:33 Uhr

Da hast du wahrscheinlich recht 😃

09.10.2017 - 14:46 Uhr

Ich bin der Meinung das die Abhandlung so sehr schlecht ist.

Wenn ich einen button Click handler mit einem "nicht Button Object" aufrufe darf gerne eine Exception kommen. Da die NullRefExceptions immer sehr nichtssagend sind würde ich wahrscheinlich eine ArgumentException mit message werfen.

Wenn der Programmcode in der Methode nur funktioniert wenn ich einen Button übergebe will ich eine Exception wenn ich die Methode falsch verwende ( eine die mir sagt was falsch ist). Wenn die Methode ohne Button Object im sender funktioniert brauch ich auch keine Warning Message Box.

Aus einem Programmierfehler eine klickbare MessageBox zu machen die der User am Ende einfach wegdrückt ohne sie zu lessen finde ich furchtbar. MessageBoxen mit einer Wahl sollten sowieso verboten sein 😉

26.07.2016 - 11:36 Uhr

Ich bin ein großer Fan von Single Window Applications, die dem App - Style folgen und immer nur eine Ansicht haben, dafür muss man sich etwas mehr mit dem Inhalt und vor allem mit der Navigation beschäftigen. Wir verwenden auch Caching damit Eingabefenster ohne bedenken während der Arbeit wieder verlassen werden können, usw.

Wir haben vor einem Jahr eine Software umgestellt von sehr vielen stackenden Fenstern auf ein einzelnes (haben ebenfalls auf WPF umgestellt btw). Selbst bei einem Experten Tool wie unserer Software kommt die änderung sehr gut an. Aber wie oben schon angedeutet ist das ganze etwas mehr aufwand.

PS: Wenn WPF auch möglich ist kannst du direkt ein TabControl verwenden und so umstylen das die Tab Header so aussehen wie du willst. (Geht bei WinForms auch ist aber immer deutlich mehr aufwand)

02.06.2016 - 09:56 Uhr

Wenn du alle Threads von deinem eigenen Prozess haben willst sollte:

System.Diagnostics.Process.GetCurrentProcess().Threads

reichen.

Ansonsten musst du alle beteiligten IPC Prozesse finden. (Mit Process.Get.... )

24.09.2015 - 16:37 Uhr

Wenn du ein custom Window haben willst würde ich erstmal http://mahapps.com/ versuchen um das gewünschte (oder alternativ einfach ein modernes) custom Window zu bekommen. Wenn man damit nicht zurecht kommt kann man bei Github den Sourcecode durchstöbern und das ganze selbst implementieren (so habe ich es auch gemacht).

P.S. Mit dem NonClient Area zeugst wird hier übrigens nichts gemacht. Würde ich auch nicht empfehlen.

09.12.2013 - 12:50 Uhr

Ableitung, oder ein Template.

Ich verstehe die Frage nicht ganz: Aus was besteht deine WPF anwendung? Pages oder Windows, Wenn ein teil der application immer gleich aussehen soll wäre es wahrscheinlich besser diesen teil nicht nur einmal zu definieren sondern auch nur einmal zu instanzieren und dann den teil der sich ändert durch ein UserControl oder eine Page zu Setzten. Oder mit hilfe von Frame und Page..

26.11.2013 - 11:07 Uhr

An ein ObservableDictionary.

Habe bereits eine lösung gefunden.

<DataGrid ItemsSource="{Binding ErrorRecords}" Background="Transparent" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding ErrorNumber}" >
                    <DataGridTextColumn.HeaderTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding DataContext.Language[ErrorNumber], RelativeSource={RelativeSource AncestorType=UserControl}}"/>
                        </DataTemplate>
                    </DataGridTextColumn.HeaderTemplate>
                </DataGridTextColumn>

Warum die erste variante im OP nicht funktioniert hat weiß ich nicht.

21.11.2013 - 15:53 Uhr

Hallo Community,

Ich versuche gerade die Spalten Titel eines DataGrids an das ViewModel zu binden.
Jedoch funktioniert das ganze nicht richtig.

Nachdem Google sofort einige lösungen ausgespuckt hat, habe ich es noch immer nicht zum laufen bekommen. Hier mal die Lösungen die ich versucht habe:

  <DataGrid ItemsSource="{Binding ErrorRecords}" Background="Transparent" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding ErrorNumber}" Header="{Binding Path=DataContext.Language[ErrorNumber], RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}"/>
                <DataGridTextColumn Binding="{Binding LastOccurance}" Header="{Binding Path=Language[LastOccurence]}"/>
                <DataGridTextColumn Binding="{Binding ErrorCode}" Header="{Binding Path=DataContext.Language[ErrorCode],ElementName=LayoutRoot}"/>
                <DataGridTextColumn Binding="{Binding ErrorMessage}" Header="{Binding DataContext.Language[ErrorMessage], Source={StaticResource Proxy}}" />
            </DataGrid.Columns>
        </DataGrid>

Und die Binding Errors:> Fehlermeldung:

System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=Language[LastOccurence]; DataItem=null; target element is 'DataGridTextColumn' (HashCode=44175353); target property is 'Header' (type 'Object')
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=DataContext.Language[ErrorCode]; DataItem=null; target element is 'DataGridTextColumn' (HashCode=36366333); target property is 'Header' (type 'Object')
System.Windows.Data Error: 3 : Cannot find element that provides DataContext. BindingExpression:(no path); DataItem=null; target element is 'FrameworkElement' (Name=''); target property is 'DataContext' (type 'Object')

Wie bekomme ich das Binding hin?

19.11.2013 - 09:18 Uhr

Hallo Community,

Ich habe eine ListBox welche Punkte anzeigt und verschieben lässt.

<DataTemplate DataType="{x:Type local:Node}">
            <Thumb DragDelta="Thumb_DragDelta">
                <Thumb.Template>
                    <ControlTemplate>
                        <Ellipse Margin="-10,-10,10,10" Height="20" Width="20" Stroke="Black" StrokeThickness="1" Fill="#5FFFFFFF" x:Name="Node" />
                    </ControlTemplate>
                </Thumb.Template>
            </Thumb>
        </DataTemplate>

und im DragDelta:

  Thumb thumb = sender as Thumb;
            if (thumb == null) return;

            Node node = thumb.DataContext as Node;
            if (node == null) return;

            node.Move(e);

Das ganze funktioniert wie gewünscht.
Jedoch nur mit der Maus, wie kann ich einem Thumb ebenfalls auf Touch events reagieren oder muss ich mir hier mit Manipulation alles selber implementieren ?

Vielleicht hat jemand damit erfahrung?

mfg Console

04.11.2013 - 16:43 Uhr

Ich hab nun die Ursache gefunden.

Das UIElement liegt auf einem ScrollViewer welcher den PanningMode auf HorizonzalOnly gestellt hat, entferne ich diese Property funktioniert das ManipulationDelta wie gewünscht.

Der ScrollViewer ändert mir wohl den Mode auf Translate.
Wenn ich von ScrollViewer ableite und OnManipulationStarting überschreibe funktioniert es.

        protected override void OnManipulationStarting(ManipulationStartingEventArgs e)
        {
            base.OnManipulationStarting(e);
            e.Mode |= ManipulationModes.Scale;
        }
03.11.2013 - 19:19 Uhr

Funktionert nicht heißt?

Exceptions? Oder keine Einträge ?

EDIT: Bitte beachte
[Hinweis] Wie poste ich richtig? Punkt 2.1 und 5

31.10.2013 - 16:38 Uhr

Hallo Community,

Ich versuche gerade eine AttatchedProperty zu schreiben um einem UIElement das Zoomen per Touch zu ermöglicht. Dazu verwende ich das ManipulationDelta Event des UIElements.

Die Scale Property der EventArgs ist jedoch immer gleich (1,1)
Während alle andere Propertys ein nachvollziebares ergebniss ausspucken.

Hier der Code des events.
Sollte ich für Zoom mit etwas anderem arbeiten oder wieso ist das Delta hier immer gleich?


  private void UIElementManipulationDelta(object sender, ManipulationDeltaEventArgs e)
            {
                UIElement uiElement = sender as UIElement;
                if (uiElement != null && e.Manipulators.Count() == 2)
                {
                    Debug.WriteLine(e.DeltaManipulation.Scale.X + ", " + e.DeltaManipulation.Scale.Y );
                }
            }

mfg Console

30.10.2013 - 17:26 Uhr

Dein ansatz mit Ziffern ist falsch damit kann man nie das maximum erreichen da du mit 2* 4 bit nu 0-99 darstellen kannst während ein byte 0-255 darstellen kann.

des weiteren ist eine floating point number wie double nicht präzise und verliert information.

Ich würde eher den ansatz gehen mit long oder int zu arbeiten anstelle von char/bit oder byte/

sieh dir mal die implementierung von BigInteger an vielleicht ist das etwas in deine richtung.

EDIT: Ich wusste garnicht das es eine Framework klasse auch gibt ^^

30.10.2013 - 16:55 Uhr

vielleicht kannst du uns etwas mehr zu deinem vorhaben sagen, was ist für dich sehr groß?

23.10.2013 - 21:04 Uhr

wenn du genau das erreichen willst bist du wahrscheinlich mit PostSharp am schnellsten am Ziel. (Wobei ich mir nicht vorstellen kann wozu das gut sein soll.

23.10.2013 - 14:10 Uhr

Im moment geht es Hauptsächlich umd zwei Punkte:

Zugriff auf die Serielle schnitstelle (System.IO.SerialPort) und OleDbConnection (da wir ältere Datei formate unterstützen müssen)

Im grunde jedoch sollte es mit überscheibarem aufwand möglich sein eine .NET Core Framework klasse in meiner Store App über diese Brücke und entsprechnde Wrapper anzusprechen.

23.10.2013 - 12:49 Uhr

Hallo Community,

Ich suche nach einer einfachen möglichkeit eine brücke zwischen einer desktop exe und einer windows store app zu erstellen (das diese nicht über den store installiert werden kann ist mir klar).

Hat jemand mit diesem thema erfahrung?

20.10.2013 - 14:33 Uhr

Rufus ist eine eine open source software zum erstellen von bootbaren usb sticks (ist ein Visual C++ projekt wenn ich richtig liege) vielleicht kommst du damit weiter.

26.09.2013 - 15:47 Uhr

Du kannst einfach einen DelegateCommand verwenden der die Selbe Methode benutzt wie der ButtonClick Handler. Alternativ kannst du auch den Button an den Selben Command binden und dir den Handler sparen. Mit DataContext -> Self

        public ICommand HotkeyCommand { get { return new DelegateCommand(this.DoSomething) ;} }

Bzw den Command besser im Constructor erstellen da du ja nur einen benötigst.

16.09.2013 - 17:03 Uhr

Warum willst du eine GUI aktion in einem WorkerThread ausführen?

Invokes erzeugen viel overhead dh. einmal invoken und die schleife wieder im GUI Thread ausführen.


this.Invoke(new Action(()=> 
{
foreach....
});

08.09.2013 - 14:55 Uhr

Starte doch den SplashScreen direkt in einem eigenen Gui thread

Warum wächselst du überhaupt den GUI Thread?

03.09.2013 - 10:02 Uhr

int i = 0;
while(i < 5)
    Console.WriteLine(++i);

Bei deinem Code ist i zum Zeitpunkt des schreibens schon erhöht egal ob post oder pre, das ändert in diesem teil der for Schleife nichts.

02.09.2013 - 16:10 Uhr

Okay ich habe es nun gefunden.
Mir war nicht klar das das DataBinding die Werte über die DP zuweißt und nicht über die Property deswegen wurde mein Handler immer verworfen.

Mit einen PropertyChanged Handler in der Metadata Funktioniert es.

02.09.2013 - 12:14 Uhr

Okay ich habe das "Problem" jetzt gefunden, entferne ich den DataContext aus dem UserControll funktioniert es.

Nun tritt ein seltsames Problem auf:
Obwohl sich die Collection meines UserControlls ändert wird der EventHandler nicht ausgelöst. Obwohl die CollectionChanged handler nicht null ist.

UserControl:

public static readonly DependencyProperty ValuesProperty =
            DependencyProperty.Register("Values", typeof(ObservableCollection<CurvePoint>), typeof(CurveTest), new PropertyMetadata(new ObservableCollection<CurvePoint>()));

        public ObservableCollection<CurvePoint> Values
        {
            get { return (ObservableCollection<CurvePoint>)GetValue(ValuesProperty); }
            set 
            {
                 value.CollectionChanged += Values_CollectionChanged;
                 SetValue(ValuesProperty, value); 
            }
        }

        public CurveTest()
        {
            
            this.InitializeComponent();
            this.Values.CollectionChanged += Values_CollectionChanged;
        }

        void Values_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
        {
        }

Im ClickHandler:

            ((ObservableCollection<CurvePoint>)this.DefaultViewModel["Values"]).Add(new CurvePoint());

Woran kann das liegen?

30.08.2013 - 20:18 Uhr

Was innerhalb passiert ist erstmal egal da die collection leer bleibt.

Es geht mir im moment nur darum das die ObservableCollection meines UserControls keine änderungen an dem ViewModel mitbekommt

30.08.2013 - 17:07 Uhr

Hallo MrSparkle

Ja es ist ein eigenes UserControl, Values ist eine DependencyProperty im Output stehen im Moment keine Fehler. Montag kann ich das ganze nochmal mit Tracing versuchen.

Das TwoWay wird benötigt ändert aber nichts an meinem Problem.
DebugConverter seh ich mir ebenfalls am Montag an.

30.08.2013 - 14:52 Uhr

Hallo Community,

Ich habe ein UserControl welches eine ObservableCollection<MyPoint> als Property definiert.

Nun bieten die Windows 8 Store templates ein DefaultViewModel vom Typ ObservableMap<strting,Object>.

Diesem DefaultViewModel füge ich ebenfalls eine ObservableCollection<MyPoint> hinzu:

this.DefaultViewModel["Values"] = new ObservableCollection<CurvePoint>();

Im Xaml erstelle ich dann das Binding.

            <userControls:Curve x:Name="Curve"  Grid.Column="0"  Values="{Binding Values, Mode=TwoWay}"/>

das DefaultViewModel["Values"] ist ebenfalls an einen ListView gebunden:
Füge ich dem DefaultViewModel["Values"] nun werte hinzu werden die änderungen im ListView angezeigt in meinem UserControll kommen diese jedoch nicht an (Die Collection ist weiterhin Leer) wieso werden die Änderungen nicht an mein UserControl weitergegebn

28.08.2013 - 15:45 Uhr

Hallo,

Nach etwas Googeln bin ich nicht wirklich schlauer geworden, bis auf die Tatsache das es wohl mit Windows 8 nicht möglich ist auszulesen welche Farbe Windows 8 gerade verwendet.

Mir geht es um die Einstellungen: die Übersicht wird hier immer in der Aktuellen Systemfarbe angezeigt, genauso wie der unterpunkt "Permissions" immer den Header der aktuellen Systemfarbe verwendet. Bei meinem eigenen unterpunkten hätte ich natürlich auch gerne die selbe Farbe.

Weiß jemand ob sich die Systemfarbe der Metro UI mit 8.1 auslesen lässt?

27.08.2013 - 22:44 Uhr

Möglich ja, aufwand nicht zu verachten. Da P/Invoke (zumindest bei mir) immer sehr viel Zeit in Anspruch nimmt.

How can I catch a global cursor icon change event in C#? damit sollte man schon relativ weit kommen.

Wenn es darum geht, eine neue Hardware zu rechtfertigen würde ich es zuerst mit Schätzungen versuchen

12.08.2013 - 13:33 Uhr

Entschuldigt die Späte Antwort, ich habe mich womöglich etwas unklar ausgedrückt. Der Prototyp wird eine WPF oder Windows Store Anwendung.

Die Aktuelle anwendung ist eine WinForms Applikation und soll komplet erneuert werden, dabei wird auch eine neue GUI gewünscht. Ich habe mich bereits einige Stunden durchs Internet gewühlt. Aber wie schon gesagt erscheint mir MVVM für unsere Applikation sehr Komplex. Nun wollte ich fragen wie ihr das seht.

01.08.2013 - 15:32 Uhr

Hallo Community,

Ich bin gerade dabei einen MVVM Prototyp für eine noch Winforms Applikation zu bauen. Jedoch bin ich mir nicht mehr sicher ob MVVM überhaupt Sinnvoll ist. Da ich nicht wirklich viel Ahnung von MVVM habe wollte ich bevor ich mir ein Buch zu Gemüte führe abklären ob das denn überhaupt Sinn macht.

Es geht um eine Analysesoftware die Werte über eine Schnittelle (RS232, GSM, WLAN, etc) ausliest.

Nun haben 90% unserer Views einfach ein Set dieser Werte welche angezeigt werden sollen. Macht es hier sinn mit MVVM zu arbeiten?
Des weiteren ist mir nicht wirklich klar wie ich die Änderungen von unserer Datenquelle (einer Schnittstelle) nach oben ins Model und ViewModel durchreichen soll. Bzw es erscheint mir unnötig kompliziert.

Irgendwie erscheint mir der Aufwand das ganze mittels MVVM zu realisieren in keiner Relation zu den Vorteilen zu stehen, aber vielleicht irre ich mich ja.

Nach einer weile Googln bin ich auch nicht wirklich schlauer geworden, hier waren die Meinungen von alles nur MVVM bis hin zu MVVM ist unbrauchbar war alles vertreten. Obwohl die Positiven Meinungen überwiegen wollte ich nachfragen wie ihr das seht.

01.08.2013 - 08:28 Uhr

Hallo herbivore,

Ich dachte das Databinding horcht auf das PropertyChanged? Wenn ich das selbst machen muss wo ist dann der Vorteil des Databindings ?

Eigentlich möchte ich nur eine Observable Collection an eine PathSegmentCollection Binden. Muss ich das alles selbst machen?

30.07.2013 - 16:21 Uhr

Hallo Community,

Ich habe ein UserControll welche eine ObservableCollection von Werten enthält (Faktor und Winkel). Füge ich einen Punkt hinzu erstelle ich im Code ein LineSegment mit DataBinding und Converter auf den Wert.
Funktioniert im ersten Augenblick wie gewünscht. Ändere ich jedoch einen wert werden die Änderungen nicht Angezeigt. Füge ich hingegen einen Punkt hinzu funktioniert das ganze wie gedacht. (Databinding Funktioniert also Grundsätzlich nur PropertyChanged wird nicht abgehandelt)

            LineSegment currentSegment = new LineSegment();
            Binding pointBinding = new Binding { Source = current, Converter = this.pointConverter, Mode = BindingMode.OneWay};
            BindingOperations.SetBinding(currentSegment, LineSegment.PointProperty, pointBinding);

INotifyPropertyChanged wird ausgelöst.
Die ObservableCollection ist ebenfalls an eine ListBox mit ItemTemplate gebunden dort werden die änderungen richtig angezeigt.

Mache ich etwas falsch ?

30.07.2013 - 13:09 Uhr

"FROM Win32_Processor" -> "MaxClockSpeed",
MFG Zantos

Hast du

wmic cpu get currentclockspeed

schon versucht?
Ich habe damit eigentlich immer die Richtigen Werte bekommen.

30.07.2013 - 10:47 Uhr

Du kannst das ganze auch über das DocumentOutline Fenster im Designer machen ohne den Code zu verändern wenn du dich damit sicherer fühlst 😃

24.07.2013 - 10:14 Uhr

Hallo Community,

Ich habe ein UserControl welches eine ObservableCollection von werten enthält und dann zur Laufzeit eine PathFigure mit Segmenten Füllt und DataBindings erstellt.

Wenn ich jetzt jedoch im Designer an dem Pfad über das Property Fenster etwas ändere, "optimiert" VS den Pfad.
Vorher:

             <Path x:Name="CurvePath" Stroke="Aqua">
                <Path.Data>
                    <PathGeometry>
                        <PathFigure x:Name="CurveFigure">
                        </PathFigure>
                    </PathGeometry>
                </Path.Data>
            </Path>

Nachher:

<Path x:Name="CurvePath" Stroke="Aqua" Data="M0,0"/>

Gibt es eine Möglichkeit das zu Unterbinden?
Der Designer unterschlägt nämlich immer die Namen die ich vergebe, auch wenn ich das ändern könnte stört es mich grundsätzlich das hier optimiert wird.

11.07.2013 - 10:32 Uhr

Ich bin mir nicht sicher in wiefern die Hashset Methode einen vorteil gegenüber ein for schleife mit lista_ != listb_ vergleich hat

1000 einträge sind nicht wirklich viel, verwende einfach eine schleife
premature optimization is the root of all evil

02.07.2013 - 16:05 Uhr

seit .Net 4.5 auch die BlockingCollection<T>

BlockingCollection<T> gibt es seit .NET 4

27.06.2013 - 13:02 Uhr

CancellationPending ist für Schleifen oder ähnliche wiederkehrende abfolgen gedacht.


while(!finished)
{
     if(this.backgroundworker1.CancellationPending)
     {
          e.Cancel = true;
          break;
     }
     DoSomething();
}

Wenn dein HardwareTester das abbrechen unterstützt, kannst du dieses ja direkt im Button aufrufen, wenn das nicht der fall ist kannst du das ganze nur abwürgen (und hoffen das die exception nicht im HardwareTester zu irgendwelchen Problemen führt)

Wenn du jedoch den HardwareTester verändern kannst ist es wohl besser du baust das ganze so um das die CancellationPending unterstützt wird (indem du den backgroundworker in die HardwareTester Klasse schiebst und dich in der Klasse um einen Sauberen Abbruch kümmerst)

26.06.2013 - 14:06 Uhr

Hallo Community,

ich habe ein Form welches mit einer checkBox auf TopMost = true gesetzt werden kann. Diese Information wird dann in einer Datenquelle gespeichert und beim nächsten mal öffnen der Form wieder geladen.
Jedoch Funktioniert das setzten (im Form Load) der TopMost Property nicht beim ersten mal (wert ist laut Debugger true aber das Form verschwindet in den Hintergrund).

im Form Load:


this.checkBoxTopMost.Checked = datenQuelle;

im checkChanged:

                this.TopMost = this.checkBoxTopMost.Checked;
                //this.TopMost = this.checkBoxTopMost.Checked; Kommentiere ich diese Zeile ein Funktioniert es.
                datenQuelle = this.checkBoxTopMost.Checked;

Kleine Hintergrund Information.
Es handlet sich um eine art Globale Variablen überwachung welche in einem eigenen GUI Thread erstellt wird um selbst bei Modalen Dialogen ansprechbar zu bleiben (nicht besonders schön aber gegen die Modalen Dialoge kann ich nichts machen). Eigentlich habe ich mit dem Zweiten Gui Thread keine Probleme bis auf oben genanntes.

Kann mir jemand sagen woran das liegt?

EDIT: Jetzt funktioniert es ohne das ich irgendetwas geändert habe.
Nun ist mir schleierhaft warum, gibt es möglicherweise einen besseren ort zum setzten der TopMost Property?

24.06.2013 - 09:19 Uhr

Das Region so verbreitet sind wusste ich nicht, ich war immer der Meinung wenn der Code zu unübersichtlich ist (gerade wenn man regions in Methoden verwendet) sollte man etwas anderes dagegen machen.

Das ich meine Methoden und Interfaces etc. nicht in Regions gruppiere liegt daran das ich viel mit "Collapse to Definitions" arbeite und somit meiner Meinung nach mehr Überblick habe als mit Regions.
Meiner Meinung nach ist es nicht sinnvoll die Member meiner Klasse nach deren Typ zu gruppieren nur weil alles Events sind haben sie noch lange nichts miteinander zu tun.

Deswegen habe ich (mit folgendem Regex: ^.#(end)(:Wh)region.\n) alle Regions aus meinem Code verbannt 😃

23.06.2013 - 12:16 Uhr

BTW:

Der Code macht so keinen sinn. Siehe [Tipp] Anfängerfehler == true / == false

der Vergleich sliPercent.ValueInt == 0 ergibt bereits einen Boolean
besser lesbar wäre in deinem Fall:

bool UsePercent = sliPercent.ValueInt != 0 ;
21.06.2013 - 21:44 Uhr

Über die Einzelschritt-Methode von VS bin ich das schon durchgegangen.
Leider ohne Erfolg.

Das versteh ich nicht, du musst doch sehen ob sich bei irgend einer Zeile der Text deiner TextBox ändert, wenn nicht an welcher stelle deines Programmes verschwindet er dann?

Warum schreibst du die länge überhaupt wieder zurück in die Textbox? an dem wert länge ändert sich ja nichts?

Verschwindet der text auch wenn deine KeyDown Methode keinen Code enthält?
Am besten einfach mal debuggen und sehen an welcher stelle die Text property deiner TextBox leer wird.

Nebenbei dein Code enthält 3 mal exakt das selbe nur das der index_pa sich unterscheidet. DRY

19.06.2013 - 14:55 Uhr

Wenn das click Ereignis ausgeführt wird (egal auf welchen Button) dann ist das myClass object(da die schleife ja schon fertig ist) das letzte deines Dictionarys.

einfach eine Kopie der Referenz erstellen und diese im Click Ereignis verwenden.

foreach (KeyValuePair<int, MyClass> myClass in myDict)
{
    var current = myClass;
    Button option = new Button();
    option.Text = "Option";
    option.Click += (sender, args) =>
    {
        f2 = new FormOptions(current.Value);
        f2.ShowDialog(); // Shows Form2
    };
    testTable.Controls.Add(option, 4, row);
}
19.06.2013 - 11:08 Uhr

ok. Das heißt ich müsste im Prinzip nichts in der Klasse disposen weil ich nur Strings und ArrayLists anlege. Bei den ArrayLists rufe ich Clear auf.

Es gibt nur einen einzigen Grund eine ArrayList zu verwenden und das ist .Net 1.1
Da ich nicht davon ausgehe das du .Net 1.1 verwendest solltest du die Array list gegen eine Typsichere collection (z.B.: List<T>) austauschen

Ich denke, das irgendwo noch ein Verweis drauf ist...

Das kann dir vorerst vollkommen egal sein auch das Clear ist unnötig wenn du deine Klasse nicht mehr verwendest sind alle referenzen auf die (hoffentlich bald) List<T> wieder weg, und der GC räumt die objekte auf (wenn er lust dazu hat)

Kann es sein, dass alle nachfolgend angelegt Objekte zum ZeitThread gehören und deswegen "gehalten" werden?
Wie könnte ich soetwas herausfinden?

Irgendwie ist mir nicht klar was du zu erreichen versuchst, jedenfalls bin ich mir sicher das du mit etwas zeit in einem Grundlagen buch eine Lösung findest die deine Fragen zum Speicher ebenfalls beantwortet.

Wie kommst du überhapt darauf das du ein Speicherproblem haben könntest?

19.06.2013 - 10:57 Uhr

Der Typ "Delegate" als Basisklasse wird nicht akzeptiert. Gibts da einen anderen?

TestdelA a = (TestdelA)this.GetDelegate(true);
            Console.WriteLine(a(5));
        }

        public delegate string TestdelA(int i);
        public delegate string TestdelB(int i, int j);
        public delegate int TestdelC(double d);

        Delegate GetDelegate(bool condition)
        {
            if (condition)
                return new TestdelA(i => "TEstdelA");
            else
                return new TestdelB((i, i1) => "TEstdelB");
        }

Functioniert bei mir so wie du beschrieben hast (oder ich es verstanden habe)

18.06.2013 - 14:22 Uhr

Nur als ergänzung zu CoLos Beitrag, bezüglich Dispose:
Das IDisposable Pattern ist meiner Meinung nach einfach zu verstehen und umzusetzen.

Enthält deine klasse Ressourcen (als klassen variablen) die IDisposable implementieren:
dann sollte auch deine Klasse IDispsable implementieren, in der Dispose Methode kümmerst du dich dann um die einzelnen möglicherweise vorhandenen Ressourcen und rufst dessen Dispose() auf.

Verwendest du unmanaged ressources solltest du diese ebenfalls im Dispose(false) freigeben und im finalizer die Methode Dispose(false) aufrufen.

Enthält eine Methode eine Ressource die IDisposable implementiert:
using verwenden.

Wenn du ein Object das IDisposable implementiert über mehrere Threads verwendest sollte die Klasse die die Threads erstellt, auch dieses Object erstellen und verwalten/freigeben.

Controls die du im Designer erstellst werden automatisch beim Dispose des Forms\UserControls freigegeben.



        public void Dispose()
        {
            this.Dispose(true);
            GC.SuppressFinalize(this);
        }

        protected virtual void Dispose(bool disposing)
        {
            if (disposing)
            {
                // TODO Dispose managed ressources
            }
            // TODO Dispose unmanaged ressources
        }

        ~ClassName()
        {
            // Finalizer should only be implemented if the class contains unmanaged ressources as classes with finializers require a special treatment by the GC
            this.Dispose(false);
        }

17.06.2013 - 10:30 Uhr

Hallo,

am besten besorgst du dir einen Serial Port Monitor und siehst dir an warum bei der Original Software eine Antwort kommt und bei dir nicht, bzw wo sich die Pakete unterscheiden.

Du sendest auch beim WriteLine 0xD zweimal am Ende (keine Ahnung ob das so gewollt ist) da das WriteLine das von dir Definierte NewLine erneut anhängt. Wahrscheinlich hast du einen Simplen Fehler in deinem Protokoll, und bekommst deshalb keine Antwort.