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.
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
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...
Process.Start liefert doch schon den Process zurück... wieso nimmst Du nicht direkt den return der Methode statt nachher nochmal über die Processes zu loopen.
Verwendest Du beim Start der Anwendung Code um festzustellen ob die Anwendung schon läuft ... um diese laufende Instanz dann zu aktivieren ?
Dann könnte es sein, dass die neu gestartete Anwendung merkt, dass sie schon läuft (aber im Context eines anderen Users) und kackt dann ab wenn diese versucht die schon laufende Instanz in den Vordergrund zu holen.
Zugegeben ist einfach ein Schuss in's Blaue... aber könnte ja sein :-)
Wenn es keinen Grund gibt dass man printraw verwenden muss... dann findest Du x-Beispiele im Internet wie das DIREKT geht (File einlesen und an einen Drucker pushen).
/=Datumstrennzeichen... und das ist in DE nunmal der Punkt.
Wer lesen kann ist klar im Vorteil:
Um das Datumstrennzeichen für ein bestimmtes Datum und eine Uhrzeit-Zeichenfolge zu ändern, geben Sie das Trennzeichen in einem Zeichenfolgenliteral-Trennzeichen an. Die benutzerdefinierte Formatzeichenfolge mm'/'dd'/'yyyy erzeugt beispielsweise eine Ergebniszeichenfolge, in der "/" immer als Datumstrennzeichen verwendet wird. Um das Trennzeichen für Datumsangaben für alle Termine für eine Kultur zu ändern, entweder ändern Sie den Wert der DateTimeFormatInfo.DateSeparator-Eigenschaft für die aktuelle Kultur, oder instanziieren Sie ein DateTimeFormatInfo-Objekt, weisen Sie das Zeichen der DateSeparator-Eigenschaft zu, und rufen Sie eine Überladung der Formatierungsmethode auf, die einen IFormatProvider-Parameter enthält.
Stell dir ein Bild als Schachbrett vor. Es hat eine gewisse Anzahl Felder.
Ein kleineres Bild derselben Grösse hat gleich grosse Felder (aber logischerweise weniger).
Durch die Erhöhung der Resolution im kleinen Bild erhöhst Du die Anzahl der Felder (diese werden dadurch kleiner).
Dann ist es plötzlich ganz logisch.
Umgekehrt wird beim vergrössern eines Bildes nur Speicher verschwendet wenn man nicht gleichzeitig die Auflösung reduziert (ohne Reduzierung der Auflösung hast Du dann mehr Felder... Also 1 Ausgangsfeld wird auf mehrere Zielfelder projiziert).
Alles klar ? Ist so ähnlich wie die Körnigkeit in der Analogphotographie.
Das waren noch Zeiten als ich noch selber aus Schwarzweiss Negativen Abzüge erstellt habe :-)