Hallo Rainbird,
Ich hab kein VS2008, aber guck doch mal in die Resource-Datei der abgeleiteten Form, stehen dort eventuell für alle protected-Steuerelemente alle Resourcen noch mal drin?
Willst du die Steuerelemente im Designer ändern oder nur im QuellCode haben?
Für "im QuellCode" geht das auch über protected Properties.
Gruß
Juy Juka
Hallo @All,
*räuspern*
string[] ergebnis = str.Split("_".ToCharArray(),2); // der zweite Parameter bestimmt die maximale anzahl an ergebnissen.
Gruß
Juy Juka
[EDIT]
Da ich was übersehen habe, hier noch mal der Code, der alle Anforderungen lösen sollte:
public static string DateiNameFiltern(string input)
{
input = System.IO.Path.GetFileNameWithoutExtension(string.Empty + input);
string[] zwi = input.Split("_".ToCharArray(),2);
return zwi.Length>decimal.One?zwi[(int)decimal.One]:zwi[(int)decimal.Zero];
}
[/EDIT]
Hallo @All,
Zeit heilt alle Wunden ... leider ist der VisualStudio Forms Designer nicht verwundet sondern einfach nur zu blöd meine Assembly zu laden.
Ich bräuchte wirklich noch immer Hilfe bei dem Thema.
Gruß
Juy Juka
Hallo PalPal,
So was wie "global" gibt es in .Net nicht.
Ich empfehle dir hier zu mal die Themen Instanz-Variablen, Klassen-Variablen, lokale Variablen, static, etc. (im allgemeinen Sichtbarkeit) zu lesen. (z.B. im OpenBook, siehe unter Ressourcen von mychsharp.de.)
Ich würde die Zeilen als Attribut in der Form-Klasse deklarieren und diese dann im Konstruktor nach InitalizeComponents füllen.
Gruß
Juy Juka
Hallo winSharp93,
Das ist gut 🙂 🙂
HTML ist der Abschuss!! rofl
Gruß
Juy Juka
Hallo halloman,
Das einfachste is über die UserConfig Datei von .Net.
Du kannst dir vom VisualStudio den Zugriff darauf generieren lassen.
Dort legst du ein Property an, dass die gewählte Sprache enthält (aber eben NULL am Anfang).
Wenn du das jetzt füllst und speicherst, ist es beim nächsten Start der Anwendung nicht mehr leer und du kannst die Auswahl von dort nehmen, stadt den User zu fragen.
Gruß
Juy Juka
Hallo PalPal,
Der 100%ige Weg wäre eben so komplex, dass ich ihn hier nicht Zeigen kann.
Ich kann es aber kurz Umreisen:
Das ganze ist kompliziert aber jeden Augenblick den man dafür Aufwendet wert. Sorry, dass ich es nicht genauer erklären kann, das ist aber einfach zu viel für ein Forum.
Gruß
Juy Juka
Hallo PalPal,
Das "richtige" Vorgehen wäre bei dir, erst mal UI und Programm-Logik zu trennen. Dann müsstest du die sich wiederhohlenden Teile der UI in UserControls auslagern und diese Dynamisch auf deiner Form erstellen.
Da du aber alles schon im Designer zusammen gestellt hast, will ich dir auch Zeigen, wie du deine geleistetet Arbeit noch weiter benutzen kannst (auch wenn das nicht der 100%ige Weg ist):
Zu erst solltest du dir eine kleine Klasse schreiben, die die UI-Elemente zusammen fasst:
... class ... : Form
{
private class Zeile
{
public virutal ComboBox ProjektComboBox{get;set;}
public virtual TextBox MontagTextBox{get;set;}
public virtual TextBox DienstagTextBox{get;set;}
...
public virtual TextBox SonntagTextBox{get;set;}
public virtual TextBox SummeTextBox{get;set;}
public virtual IEnumerable<TextBox> TagesTextBoxListe
{
get
{
yield return this.MontagTextBox;
yield return this.DienstagTextBox;
...
yield return this.SonntagTextBox;
}
}
public Zeile(){}
public Zeile(ComboBox projektComboBox, TextBox montagTextBox, ..., TextBox summeTextBox)
{
this.ProjektComboBox = projektComboBox;
this.MontagTextBox = montagTextBox;
...
}
}
}
Als nächtes fasst du alle Steuerlemente aus deiner Maske in eine Verarbeitbare Liste zusammen:
Zeile[] alleZeilen = new Zeile[]{
new Zeile(this.projektComboBox1, this.TBx_Mo1, ...),
new Zeile(this.projektComboBox2, this.TBx_Mo2, ...),
...
};
Jetzt kannst du alle Steuerelemente mit dieser Liste durchgehen. 🙂 Viel Spass.
Noch mal:
Gruß
Juy Juka
Hallo PalPal,
Müssen es TextBoxen sein oder könnte es auch ein DataGridView werden?
Der Name des Controls ist eigentlich völligst egal, was willst du mit dem setzen von "textBox.Name" erreichen?
Hast du schon alle TextBoxen auf die Maske gezogen?
Gruß
Juy Juka
Hallo Abt,
Also von einem E vorne weg würde ich abraten.
Das ist nicht in den Richtlinein für Namen vorgeschlagen, sondern
Verwenden Sie für Enumerationen Namen im Singular, sofern ihre Werte keine Bitfelder sind.
Verwenden Sie einen Namen im Plural für Enumerationen, deren Werte Bitfelder sind. Diese Enumerationen werden auch als Flags-Enumerationen bezeichnet.
Einfach nur den Namen.
Gruß
Juy Juka
Hallo dN!3L,
Danke, funktioniert jetzt einwandfrei. 😃
Aber ich habe stadt
if (propertyInfo.PropertyType.IsValueType) ilGenerator.Emit(OpCodes.Unbox,propertyInfo.ReflectedType);
folgendes geschrieben
if (property.ReflectedType.IsValueType)
ilGenerator.Emit(OpCodes.Unbox, property.ReflectedType);
War doch richtig, oder? Oder war PropertyType prüfen und ReflectedType verwenden absicht?
Mit freundlichem Gruß
Juy Juka
Hallo herbivore,
Das ganze hat zwei einfache gründe:
Also wenn es möglich wäre, würde ich das ganze gern so klein halten wie möglich. Eine DynamicMethod mit C# wäre so der Königsweg.
Gruß
Juy Juka
Hallo @All,
Ich dachte mir gestern, dass ich mich endlich mit Reflection.Emit beschäftigen sollte, da ich einen dynamischen Zugriff auf Properties brauche.
Mit MSDN und Reflector (der mir einen Beispiel-Code von C# lesbar nach IL transformiert) hat es auch funktioniert.
Der erste Test mit System.Collections.Generic.List<object>Count hat auch funktioniert und immer den richtigen Wert ausgelesen. Aber der zweite Test mit System.DateTimeSecond funktioniert nicht immer. Bei einigen DateTime-Objekten bekomme ich immer total zufällige Werte zurück anstelle des Inhalts von Second.
System.DateTime dt = new System.DateTime(2011, 02, 10, 01, 09, 51);
System.Converter<object,object> zwi = PropertyEigenschaften.ConverterBuilder.Erzeugen(typeof(DateTime).GetProperty("Second"));
System.Console.Out.WriteLine(zwi(dt));
private static int counte;
private static Type _This = typeof(ConverterBuilder);
private static Type _Obje = typeof(object);
private static Type _Conv = typeof(Converter<object, object>);
private static Converter<object, object> CreateConverter(Type typ, PropertyInfo property)
{
DynamicMethod dynamicMethod = new DynamicMethod(
string.Format("M{0:#0}",++counte),
MethodAttributes.Static | MethodAttributes.Public,
CallingConventions.Standard,
_Obje,
new Type[]{_Obje},
_This,
true);
dynamicMethod.DefineParameter(
(int)decimal.One,
ParameterAttributes.In,
dynamicMethod.Name);
ILGenerator generator = dynamicMethod.GetILGenerator();
generator.DeclareLocal(_Obje);
generator.Emit(OpCodes.Ldarg_0);
generator.Emit(OpCodes.Castclass, typ);
generator.EmitCall(OpCodes.Callvirt, property.GetGetMethod(true), null);
if (property.PropertyType.IsValueType)
generator.Emit(OpCodes.Box, property.PropertyType);
generator.Emit(OpCodes.Stloc_0);
generator.Emit(OpCodes.Ldloc_0);
generator.Emit(OpCodes.Ret);
return (Converter<object,object>)dynamicMethod.CreateDelegate(_Conv);
}
Sieht jemand ein Problem im mit Emit erstellten Code? Wenn ich es mit einem im Reflector umgewandelten C#-Beispiel verlgeiche sehe ich keine Unterschiede (außer nop die nicht da sind.)
Ebenfalls hilfreich wäre, wenn mir jemand sagen könnte, ob ich aus DynamicMethod irgend wie den lesbaren IL-Code erzeuge/ausgeben lassen kann.
Danke für's lesen so weit erst mal.
Gruß
Juy Juka
Hallo Reinhardtinho,
Gib nicht so schnell auf, es geht tasächlich.
Es enthält zwar ein paar eklige Hacks hier aber die Lösung:
public class Hack : System.Collections.ArrayList
{
public void DoHack()
{
try
{
typeof(System.Collections.ReadOnlyCollectionBase).GetField("list", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).SetValue(Application.OpenForms, this);
}
catch
{
}
}
public override int Add(object value)
{
Form f = value as Form;
if (f != null)
{
// Hier kommt dann teil 2
}
return base.Add(value);
}
}
private static IEnumerable<C> Suchen<C>(Control.ControlCollection cc)
where C : Control
{
if(cc!=null)
foreach (Control c in cc)
{
C re = c as C;
if (re != null)
yield return re;
foreach (C reN in Suchen<C>(c.Controls))
yield return reN;
}
}
IEnumerable<TextBox> alle = Suchen<TextBox>(f.Controls);
foreach (TextBox t in alle)
{
if (t.BorderStyle == BorderStyle.Fixed3D)
t.BorderStyle = BorderStyle.None;
}
Teil 1 ist ein "dreckiger" Hack, funktioniert aber.
Teil 2 ist ziemlich normal.
Bei Teil 3 wird es halt schwierig den Standardwert zu erkennen bzw. zu erkennen, dass der Wert zu ändern ist.
Gruß
Juy Juka
PS: Ach ja, der Quellcode ist nicht 100%ig getestet, in einem anderen Szenario hab ich es so (ähnlich) aber benutzt.
Hallo Seikilos,
Benutze einfach den FullQualifiedName von deinem FormManager, dann kannst du das Property sicher ohne Probleme "richtig" benennen.
((Falls der FormManager im Namespace Seikilos liegen würde:))
public Seikilos.FormManager FormManager { get; private set; }
Gruß
Juy Juka
Hallo @All,
Danke für eure Zeit und mühe.
Besonderen Dank an Floste, da ich mich für seiner/ihrer Methode entschidene habe und es sauber und flüssig funktioniert.
Gruß
Juy Juka
Hallo @All,
@rasepretrep: Basis-Form vor allem abstrakt geht mal garnicht, dieses Desaster hatten wir in der letzten Version der Software. Ein Framework für die Forms (wie du es vorschlägst) ist aber schon ein angestrebtes Ziel, jedoch im nachhinein ist das aus Zeitlichen gründen nicht drin (alls ich die Form's das letzte mal gezählt habe waren es weit über 200 und das ist auch schon wieder 4 Jahre her).
@ErfinderDesRades: Vielen Danke. Wenn man normalerweise nicht so weit in die Windows-Api-Welt eintaucht (ich finde IMessageFilter ist mit dem Kopf vorran drin), sucht man sich nach solchen Konstanten dumm und dämlich.
@Floste: Wenn es jetzt noch ein Ereigniss gibt, das ausgelöst wird, wenn eine neue Form erzeugt wird, muss ich mal zum Augenarzt. 😃 😃
Danke an alle die gepostet haben und danke für eure Zeit und Hilfe.
Gruß
Juy Juka
Hallo @All,
Ich möchte alle Form-Objekte in meiner Anwendung mit einem neuen Icon versehen.
Das ganze klappt auch schon mit dem nachfolgenden Code, nur bin ich mir nicht sicher ob es da nicht noch bessere Wege gibt.
Ziele:
Danke erst mal für's Lesen.
Gruß
Juy Juka
Der Code:
public void Ausfuehren(string parameter)
{
Application.AddMessageFilter(this);
}
public static System.Windows.Forms.Form GetForm(System.IntPtr handle)
{
return handle == System.IntPtr.Zero ? null : System.Windows.Forms.Control.FromHandle(handle) as System.Windows.Forms.Form;
}
private static System.EventHandler shown;
bool IMessageFilter.PreFilterMessage(ref Message m)
{
System.Windows.Forms.Form f;
if (m != null)
{
if((f = GetForm(m.HWnd)) != null)
{
f.Shown += shown ?? (shown = new System.EventHandler(f_Shown));
}
}
return false;
}
private static System.Drawing.Icon icon;
private void f_Shown(object sender, System.EventArgs e)
{
Form f = sender as Form;
if (f != null)
{
f.Icon = icon ?? (icon = System.Drawing.Icon.FromHandle(Properties.Resources.NeuesIcon.GetHicon()));
}
}
Hallo,
Nur weil ich den Link gerade vor einer Minute im neuen Newsletter gesehen habe:
Simplest way to implement irregular forms in .NET
Gruß
Juy Juka
Hallo #coder#,
Was ErfinderDesRades meint* ist, dass dies das Standard-Verhalten von Windows/.Net ist und du einfach das Kontextmenü öffnenst und dann die Pfeiltasten benutzen kannst. (Probiers ruhig direkt hier im Browser aus.)
Gruß
Juy Juka
*falls du es nicht verstanden hast, ich hätte es nicht verstanden, hätte ich es vorher nicht gewust.
Hallo skafoot,
Man sollte auf jeden fall mit Schnittstellen zwischen den Schichten arbeiten. In den meisten Fällen - meiner Erfahrung nach - ist es sinnvoller mit Schnittstellen zu arbeiten als ohne.
Im 3-Schichten-Model soll man immer nur auf die genau darunter liegende Schicht zugreifen. Es ist mir aber auch schon oft genug untergekommen, dass man dies einfach ignoriert und beliebig weit nach unten greifen darf.
Klar fängt man sich damit Nachteile ein (Abhänig zu jeder Schicht auf die man zugegriffen hat, als größtes Beispiel mal), aber eventuell stört das ja garnicht. Man muss es sich nur im Vorfeld überlegen.
Gruß
Juy Juka
Hallo @All,
Man braucht hier keine Custom-Config-Section, das kann der Designer in VisualStudio, nur wie man ihm den Typ "X[][]" beibringt ist kompliziert.
Im anhang eine Beispiel Settings.settings.
Gruß
Juy Juka
Hallo,
Nur zur vollständigkeit:
die BindingSource ist eine Komponente und kann von Windows-Forms-Designer erstellt und verwaltet werden.
Gruß
Juy Juka
Hallo inflames2k,
So sollte es sein.
Gruß
Juy Juka
Hallo inflames2k,
Verwendest du in dem UserControl eine BindingSource?
Die würde pro Instanz des UserControls erzeugt und könnte sich so also für jedes UserControl auf der übergeordneten Maske die Auswahl merken. Wenn du diese nicht Verwendest benutzen alle Instanzen die gleiche Liste und die Liste "merkt" sich natürlich nur eine Position. (allse nur wage geschrieben, dürfte aber ausdrücken was passiert)
Gruß
Juy Juka
Hallo DavidT,
Bist jetzt verwende ich den Designer der in VS2010 eingebettet ist.
Mit ein paar Tricks konnte ich bis jetzt damit noch alles in die Konfig bekommen, was nötig war.
Gruß
Juy Juka
Eine Externes Tool muss man wohl nicht auf VS2010 anpassen, sondern wohl er auf die verwendete .Net Version. Welche nutzt du?
Hallo @All,
Forhe Weihnachten!
Frohes Fest!
Und all die anderen Wünsche wünsch ich euch auch.
Gruß
Juy Juka
Hallo Skato,
Dazu brauch ich dir garnicht mehr erzählen. Einfach eine Anleitung zur Aufgabenplanung (Windows 7 oder Vista) bzw. Geplante Tasks (alle anderen Windowsversionen) suchen.
z.B.: http://www.bing.com/search?q=aufgabenplanung+windows7
Wenn du damit eine *.exe startest die dauerhaft läuft, kann man es so einstellen, dass er bei jedem Auslösen des geplanten Task/der Aufgabe überprüft ob die zuvor gestartete *.exe noch läuft und nur startet, wenn sie das nicht mehr tut. (aka. WatchDog).
Ein Beispiel für Windows 7 findest du als Screenshots, für andere Windows Versionen sieht die UI anders aus, tut aber intern das gleiche.
Gruß
Juy Juka
Hallo Skato, Hallo herbivore,
Wie wär's mit dem eingebauten Watchdog von Windows?
Die geplanten Tasks bzw. den Taskplane (je nach Windows Version) kann man so einstellen, dass er Programme neustartet wenn Sie nicht da sind.
Gruß
Juy Juka
Hallo,
Noch immer plagt mich dieses Problem. Ich komme einfach nicht weiter.
An das AppDomain-Objekt zu kommen wäre ja eigentlich schon die Lösung für mein Ursprüngliches Problem:
Der Windos Forms Designer von Visual Studio 2010 soll (für DataBinding) eine Klasse aus Assembly A in Version x.x.x.x laden, die Assembly liegt aber in Version x.x.x.y vor. Obwohl die Assembly nicht signiert ist, nicht im GAC liegt und ganz normal verfügbar ist, lädt der Designer die Assembly nicht und stürzt ab. (Siehe Bild.)
Ich will eigentlich nur meine Masken mit dem Designer weiter bearbeiten. Wenn jeman weiß wie ich ihn dazu bringen kann, wäre das auch toll, dann brauch ich auch das AppDomain-Objekt nicht mehr.
(Aber ich würd's auch gern noch mit dem AppDomain-Objekt weiter versuchen.)
Gruß
Juy Juka
Hallo Froggie,
Da gibt's zum Glück eine nette funktion vom VisualStudio.
Die standard/fall-back Einstellungen werden von VisualStudio mit in die DLL kompiliert (einfach mal in Settings.Designer.cs gucken) und verwendet, wenn in der App.config/Web.config nichts zu finden ist.
Gruß
Juy Juka
Hallo herbivore,
dann ist es ja kein Fehler. (Punkt) 🙂
Gruß
Juy Juka
Hallo,
Gerade habe ich unten in der Leiste mit den Aktiven Benutzern gesehen, das ich michalG zweimal angzeigt bekomme (siehe screenshot).
Ist das ein Fehler?
Gruß
Juy Juka
Hallo Froggie,
Eine Anwendung in .Net hat eine Konfigurationsdatei, nicht jede DLL eine eigene.
Jede DLL definiert nur eine Section (ein XML-Tag) innerhalb dieser einen Konfigurationsdatei.
Aber um zu deinem Problem zurück zu kommen: Die *.config Dateien aus den Projekten sind für die eigentliche *.exe völlig irrelevant. Du musst/sollst die Definitionen der Sections und die Sections selbst in die *.exe.config (bzw. app.config oder web.config) einfügen.
Gruß
Juy Juka
Hallo VBMichi,
.Net Anwendungen im allgmeinen kann man einfach durch Copy&Paste installieren.
Wenn du also nur *.dll Dateien und *.exe Dateien verwendest, die du mit Copy&Paste im Ausführungsverzeichnis einfügst, sollte alles bei installiertem .Net-Framework gehen.
Gruß
Juy Juka
Hallo,
Auch wenn es keine große Sache ist, es gibt ein nettes Update für JuyJuka.Reports.
Mit Version 2.1.0.0 ist es jetzt möglich "Unterproperties" von Objekten direkt anzusprechen. Damit gemeint sind Properties von Objekten die man aus Properties ausliest.
public class Kopf
{
public List<Position> Positionen{get;set;}
}
Wollte man die Anzahl (Count) der Positionen ermitteln waren in Version 2.0.0.0 noch folgende zwei Vorlgen notwendig:
Anzahl Positionen: @REPORT(Kopf.Positionen.Count.txt,Positionen@
@Count@
Mit Version 2.1.0.0 hat es sich auf folgendes reuziert:
Anzahl Positionen: @Positionen.Count@
Vielen Dank für's lesen.
Gruß
Juy Juka
Hallo kelkes, Hallo @All,
Castle Windsor.
... Es drängt sich mir die Frage auf, wie man "keinen DI Container" benutzen kann...
David W hat die Antwort auf deine Frage gegeben:
Ich benutze keine Container, ich benutze nur einen ServiceLocator...
Ach ja: Wir verwenden auch kein DependencyInjection, sondern auch ServiceLocator (aka. Microkernel, Factory, AbstractFactory).
Gruß
Juy Juka
Hallo DNAofDeath,
Das StringDictionary scheint sich nicht/nicht gut als XML serialisieren zu lassen.
Nimm doch lieber ein Array eines selbst erstellten Typs, das ist einfacher.
"Propertie- Datei" in C#
Abwer warum brauchst du in den Settings noch mal eine Auflistung für weitere Setting? Die Settings sind doch schon eine Liste.
Gruß
Juy Juka
Hallo,
Um sich am AssemblyResolve-Ereigniss anzumelden gibt es eigentlich nur eine gute stelle, wenn man die *.exe selber schreibt:
Die ersten 5 Zeilen in der Main-Methode.
Schreibt man nur eine Komponente die von anderen Geladen wird, dann muss man in jeder öffentlichen Klasse einen Typinitialisierer schreiben und dort eine Methode aufrufen, die das Anmelden übernimmt (und dafür sorgt, dass man sich nur einmal anmeldet).
Gruß
Juy Juka
Hallo Amosius,
Dazu gibt es schon ein fertiges Programm, welches alles notwendige in deiner fertigen (normalen) Anwendung einbindet.
.Netz
Gruß
Juy Juka
Hallo 0815Coder,
Das ist ja gut zu wissen. 😃 Genau so was können wir hier auch gut gebrauchen. 😃
Gruß
Juy Juka
Hallo Diräkt,
Das ist genau das Verhalten von .Net, steht auch in der MSDN so.
Er sucht erst nach de-DE, dann nach de und schließlich nach der FallBack-Adresse (alos ohne Land/Sprache).
Gruß
Juy Juka
Hallo Froggie,
Hier zwei Vorschläge von mir:
Gruß
Juy Juka
Hallo @All,
Ich will in einem VS2010 AddIn das AppDomain.AssemblyResolved Ereigniss behandeln.
Funktioniert für die AppDomain in die mein AddIn geladen wird auch super, jedoch verwendet (z.B.) der Windows-Forms-Designer eine andere/eigene AppDomain.
Die Frage ist also: Wie komme ich an dieses AppDomain-Objekt?
Gruß
Juy Juka
Hallo Xander,
Genauer hab ich darüber auch noch nicht nachgedacht, aber folgender Link ist sicher ein guter Anfang:
Richtlinien für Namen
Gruß
Juy Juka
Hallo serial,
Der Aufwand ist echt haarig. Das Thema ist ja auch sehr groß und wichtig.
Ohne eine verallgemeinernde Lösung, wie Microkernel/Dynamische Proxies/Aspektorientierung, wird er aber leider auch nicht weniger.
Da ich linq2sql nicht kenne, kann ich dir keinen Tipp geben, welche Technologie damit verbunden werden kann.
Gruß
Juy Juka
Hallo serial,
... Fasade ...
Eine Fasade hilft hier garnix, da die Fasade alles nur "hübsch zusammen fasst", aber (eigentlich) den vollen Zugriff auf die zugrundeliegenden Objekte offen lässt.
((Ich denke du meinst eher Decorator.))
Gruß
Juy Juka
Hallo serial,
Es ist nicht unbedingt eine bessere/schönere Lösung, aber ich wollte das es hier im Thread erwähnt ist:
Schutz-Proxy (Proxy-Pattern)
Und beim Thema Domain-Objekt + Service-Layer: Warum sollte das Domain-Objekt nicht auch eine Schutz-Proxy/-Dekorator bekommen?
Ich fände es sogar sehr elegant, wenn die Rechteverwaltung in der gesammten Software über das gleiche Konzept gelöst werden würde. Zum Beispiel könnte man so auch ein einheitliches "Framework" entwickeln, mit dem man so was in der Präsentationsschicht anzeigen kann.
Gruß
Juy Juka
Hallo Gandi,
Warum machst du das mit einer statischen Mehtode?
Du solltest dir hierfür lieber das Factory-Pattern (oder AbstractFactory-Pattern) ansehen.
Gruß
Juy Juka
Hallo MarsStein,
Man kann Properties vor der Anzeige dem Benutzer gegenüber im Designern (Forms, WebForms, etc.) mit [Browsable(false)] verstecken.
Man kann die Properties vor dem Serialisieren der Designer (siehe oben) mit [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] verstecken, was z.B. beim Forms-Designer verhindert das Quellcode zu diesem Property erstellt wird.
Man kann sogar Properties vor dem Intelisense verstecken (!!). Wie das geht weiß ich aber nicht.
Gruß
Juy Juka