Laden...
Programmierhans
myCSharp.de - Experte
63
Themen
4.221
Beiträge
Letzte Aktivität
vor einem Jahr
Dabei seit
05.04.2005
Beruf
Coden was das Zeug hält
Herkunft
Zentralschweiz
Interessen
Modellbau / Auto / Heli
Erstellt vor 6 Jahren

(ich habe nicht alles im Detail durchgelesen).

Aber wie wäre es mit einem ganz anderen Ansatz.

Mit einem ContinueWith.

https://msdn.microsoft.com/de-de/library/dd537612(v=vs.110).aspx

Die Objekte würden sich dann selber für den nächsten Prozesschritt anmelden sobald sie verfügbar sind.

Erstellt vor 7 Jahren

Mach den Designer mal im Debugger auf.. damit Du eine Ahnung hast wieso es knallt...

Hier hatte ich das mal beschrieben: UserControl kann im Designer nicht hinzugefügt werden

Erstellt vor 7 Jahren

Du könntest das Zielform im Code so ändern dass es von Form erbt... dann scheint das kopieren ja zu funktionieren.

Nach dem kopieren änderst Du die Form wieder so ab, dass die wieder von Deiner Baseclass erbt.

Erstellt vor 8 Jahren

Hallo herbivore

Danke für den Hinweis.
Habe ich sofort angepasst.

Gruss
Programmierhans

Erstellt vor 8 Jahren

RangeCheck-Extension für IComparable:

Eine kurze generische ExtensionMethode um zu prüfen ob sich ein Wert innerhalb / ausserhalb oder auf der Grenze befindet.



    public static class Extensions
    {
        public static RangeCheck IsInRange<T>(this T pValue, T pBorder1, T pBorder2) where T: IComparable
        {
            return (RangeCheck)(Math.Sign(pBorder1.CompareTo(pBorder2)) == 0 ? 
                Math.Abs(Math.Sign(pValue.CompareTo(pBorder1))) + 1 : 
                Math.Abs(Math.Sign(pValue.CompareTo(pBorder1)) + Math.Sign(pValue.CompareTo(pBorder2))));
        }
    }



    public enum RangeCheck
    {
        Inside = 0,
        Border = 1,
        Outside = 2
    }


TestCode:

        private void Test()
        {

            int border1 = 3;
            int border2 = 7;

            System.Diagnostics.Debug.WriteLine("RealBorder (3-7)");

            for (int value = 1; value < 10; value++)
            {
                System.Diagnostics.Debug.WriteLine("{0}={1}", value, value.IsInRange(border1, border2));
            }


            border1 = 5;
            border2 = 5;

            System.Diagnostics.Debug.WriteLine("EqualBorder (5)");

            for (int value = 1; value < 10; value++)
            {
                System.Diagnostics.Debug.WriteLine("{0}={1}", value, value.IsInRange(border1, border2));
            }
        }
    }



Ausgabe:

RealBorder 3-7
1=Outside
2=Outside
3=Border
4=Inside
5=Inside
6=Inside
7=Border
8=Outside
9=Outside

EqualBorder (5)
1=Outside
2=Outside
3=Outside
4=Outside
5=Border
6=Outside
7=Outside
8=Outside
9=Outside

Edit: herbivore hat natürlich Recht... (Math.Sign eingebaut)

Range Check IComparable Extension

Erstellt vor 8 Jahren

Hi,

Bei deinen Einschränkungen fällt mir dann somit auch nur eines ein:
Implementiere die Schnittstelle vollständig - und wenn es gar nicht anders möglich ist wirfst du bei Aufruf der Methode eine "NotSupportedException".

--> NotImplementedException 😃 Ansonsten sehe ich das auch so wie Du.

Erstellt vor 9 Jahren

Tritt das noch auf wenn This.Invokerequired um && this.Handle != Intptr.Zero ergänzt ?

Erstellt vor 10 Jahren

Herzlich willkommen.

Bitte als erstes dies hier beachten:

[Hinweis] Wie poste ich richtig?

Dann stellst Du konkrete Fragen.

Gruss
Programmierhans

Erstellt vor 10 Jahren

Hallo Sebastian

Das mit dem Google für faule ist jeweils eher als Hilfe gedacht (ist doch bequem wenn man die Suche nicht selber tippen muss)... War sicher nicht böse gemeint.

Das mit dem ReferenceConverter... wie schon geschrieben schau mal welcher TypeConverter auf dem IComponent ist... und dann dessen Base... und schon haste den gefunden 😃

Sich in das Designerverhalten eigener Controls einzuarbeiten ist hart ... aber mit der Zeit verstehst Du da auch immer mehr...

Viel Spass beim experimentieren
Gruss
Programmierhans

Erstellt vor 10 Jahren

Meiner Meinung nach fährst Du aber besser wenn Du die inneren Klassen von Component ableiten lässt (Dann brauchst Du auch den ReferenceConverter nicht... und kriegst gratis den Designer-Support)

Also in etwa so:




    public class MyClassA : System.Windows.Forms.Panel
    {
        private IContainer components;
        private MyClassB _Property1 = new MyClassB();
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public MyClassB Property1 { get{return this._Property1;} private set{this._Property1=value;} }

        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.components.Add(_Property1);
        }
    }

    
    public class MyClassB:Component
    {

        private IContainer components;
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.components.Add(_Property1);
        }

        private string _Name = "myClassB";
        public string Name { get{return this._Name;} set{this._Name=value;} }


        private MyClassC _Property1 = new MyClassC();
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public MyClassC Property1 { get{return this._Property1;} private set{this._Property1=value;} }

        private BindingList<MyClassC> _Test=new BindingList<MyClassC>();
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public BindingList<MyClassC> Test { get{return this._Test;} private set{this._Test=value;} }
    }

    public class MyClassC:Component 
    {
        private string _Name = "myClassC";
        public string Name { get { return this._Name; } set { this._Name = value; } }
    } 


Schau Dir mal auf dem Interface IComponent vorhandenen Attribute an...