Laden...
L
Lexodus myCSharp.de - Member
Entwickler Schweiz Dabei seit 19.08.2005 254 Beiträge
Benutzerbeschreibung

Forenbeiträge von Lexodus Ingesamt 254 Beiträge

29.01.2007 - 15:07 Uhr

Hallo Leute

Mir fehlt schon seit einiger Zeit n "Workflow" im Bezug auf UserControls und Viewstate.

Mit ASP.NET 2 haben sie auf der Page Klasse das neue Event "OnPreInit" eingeführt.
In der PreInit Phase kann man die Controls die in der Page im deklarativen Teil eingefügt wurden, bevor der Viewstate getrackt wird, manipulieren.
Ich kann so den Viewstate davor schützen mit unnützem Zeug vollgestopft zu werden.

Beim UserControl, ist mir aufgefallen gibt es sowas nicht. Hier wird der folgende Weg vorgeschlagen;

Control dynamisch erzeugen und dann in nen "Container" per UserControl.Controls.Add(ItemToAdd); zu stopfen. --> Im OnInit bevor "Base.OnInit()" aufgerufen wird.

Das blöde ist, wenn ich das so mache und ich möchte mit dem Objekt arbeiten, das ich in den "Container" gestopft habe, so muss ich es mir bei jedem Page_Load mit FindControl oder so wieder aus diesem Container rauspopeln (oder halt dort wo ich es brauche beim Init,etc).

Die scheint aber der "offizielle" Weg zu sein, nur bin ich mir nicht sicher dabei...

Hier die Lektüre;
http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx

Zitat; Es geht um den "OnPreInit" ...
"That is actually a great place to initialize child control properties programmatically because it occurs before the child control's OnInit (and therefore before it is tracking ViewState) and after the controls are created. However, OnPreInit is not recursive like the other control phase methods are. That means it is only accessible on the PAGE itself."

Aber kann man das gleiche denn nicht irgendwie auch beim UserControl hinbekommen? Die "Child"-Controls dynamisch im UserControl zu erzeugen ist doch n komplett anderer Weg?

Oder ist das einfach wiedermal n achso toller "By Design" bug von ASP.NET?

Gruss

25.01.2007 - 15:28 Uhr

wenn du in der Console "route" eingiebst und er findet das (egal von welcher stelle du es machst) ist die Exe meisten in C:\windows\system32.

Was bei der Exe "route.exe" genau der Fall ist.

Nun müsstest du eigentlich nur noch diese route.exe mit den richtigen Argumenten aufrufen (so glaube ich mal, habs selbst noch nie gemacht)


Process p = new Process();
p.StartInfo.FileName = filename;
p.StartInfo.UseShellExecute = true;
p.StartInfo.RedirectStandardOutput = false;
p.StartInfo.Arguments = parameters;
p.Start()


Vielleicht kannst du bei Filename "route.exe" direkt ohne pfad mitgeben (möglicherweise sucht er dann auch am richtigen Ort)

Gruss

Lex

@Edit: Die "Arguments" sind das was du noch setzen musst

25.01.2007 - 10:03 Uhr

foreach (ConnectionStringSettings singleSetting in ConfigurationManager.ConnectionStrings)
			{
				ListItem item = new ListItem(singleSetting.Name, singleSetting.ConnectionString);
				lBAvailableConn.Items.Add(item);
			}

25.01.2007 - 09:58 Uhr

probier mal den OnInit zu überschreiben im UserControl. Mache im Moment genau das gleiche.

http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx

Wenn dir der nicht weiterhilft kann ich es leider auch nicht....

@Edit
Bei mir bläht sich der Viewstate leider auf wenn ichs beim OnInit mache....

@Edit2

Oder vielleicht hilft dir das...
http://scottonwriting.net/sowblog/posts/2129.aspx

25.01.2007 - 09:48 Uhr

Jop, das stimmt schon (stell dir die ganzen verschachtelten If's vor)

Bei mir war es einfach so, ich hab relativ lange Regex angeguckt hab, habe die Regex dann eingepflegt und nach 10s vergessen wie ich die schon wieder gemacht hatte^^. Ich hab mir mal ne Regex geladen die UNC und Filepfade überprüft... Respekt vor dem ersteller...

PS: Das Tool ist echt toll

24.01.2007 - 18:07 Uhr

Hmmm.

Hab hier grad diskussion mit meinem Mitarbeiter gehabt und bin zu folgendem Schluss gekommen;

Tabellen nehmen 🙂

Ob ich Layout jetzt mit CSS Hacks oder mit Tabellen mache, sollte wohl kaum darauf ankommen ...

Gruss

@Edit: Der Ehrgeiz packt(e) mich immerwieder von neuem, jetzt ist aber schluss...
Hatte in diesem Forum schön öfters CSS diskussionen die dann in CSS "hacks" ausgeratet haben.

24.01.2007 - 17:35 Uhr

float kenn ich, kann ich leider nicht verwenden weil es den umgebenden Layout-Fluss bricht.

zum Position Attribute;
http://de.selfhtml.org/navigation/suche/index.htm?Suchanfrage=position

"static" ist default, das ist für mich aber richtig. Mit den beiden Sachen werd ich hier wohl nicht weiter kommen. (Ich möchte die Elemente ja nicht absolut positionieren)

@Edit: Hab das sample um position:relative erweitert und bei mir getestet, hat nichts gebracht.

@Edit2: Nen CSS "Hack" für 2 elemente wovon eines links und eines rechts auf der gleichen Zeile ist, habe ich schon erhalten. Dazu müsste ich aber die DIVS stark verschachteln (was ich vermeiden möchte wenns anders überhaupt geht).

24.01.2007 - 16:45 Uhr

Hallo zusammen.

Ich habe folgendes Problem;

Ich möchte 4 Divs nebeneinander anzeigen. (also auf der gleichen Zeile).
Untereinander ist ja relativ einfach;


		<div class="defaultContainer" style="width:300px;height:50px">
		</div>
		<div class="defaultContainer" style="width:300px;height:50px">
		</div>
		<div class="defaultContainer" style="width:300px;height:50px">
		</div>
		<div class="defaultContainer" style="width:300px;height:50px">
		</div>

die DefaultContainer klasse ist für mich selbst ne hilfe damit ich die Divs visuell sehe, so sieht er aus


.defaultContainer
{
	border-style: solid; 
	border-width: 1px; 
	border-color: black;
	margin: 2px;
	padding:2px
}

Nun möchte ich diese Elemente aber nebeneinander anzeigen; Gemäss Selfhtml CSS erklärung hätte ich das so gemacht;


	<div class="defaultContainer" style="display:inline;width:300px;height:50px">
		</div>
	<div class="defaultContainer" style="display:inline;width:300px;height:50px">
		</div>
	<div class="defaultContainer" style="display:inline;width:300px;height:50px">
		</div>
	<div class="defaultContainer" style="display:inline;width:300px;height:50px">
		</div>

Ist das richtig? Nur die Browser interpretieren es falsch?

IE6 zeigt hier garnichts mehr an (also die divs mit display:inline)
Mozilla interpretiert die Grössenangaben nicht mehr. (ist dann so 1px breit und n bischen mehr pixels hoch).

Passe ich dieses Beispiel dann so an wie ich es brauche;


		<div class="defaultContainer" style="display:inline"> //genau wie vorher, bloss mit inhalt
		<asp:ListBox ID="lBAvailableConn" runat="server" Rows="10">
			<asp:ListItem>Conn1</asp:ListItem>
			<asp:ListItem>Conn2</asp:ListItem>
		</asp:ListBox>
		</div>

		<div class="defaultContainer" style="display:inline"> //genau wie vorher, bloss mit inhalt
			<asp:Button ID="Button1" runat="server" Text="New" Style="display: block"/>
			<asp:Button ID="Button2" runat="server" Text="Edit" Style="display: block"/>
			<asp:Button ID="Button3" runat="server" Text="Delete" Style="display: block"/>
		</div>

Siehts noch 10mal schlimmer aus im Mozilla --> IE6 hat hier den Vorteil dass er einfach immernoch nichts anzeigt. 😁

Hier steht http://de.selfhtml.org/navigation/suche/index.htm?Suchanfrage=display ;

"Mit display: können Sie die Anzeige von Elementen unterdrücken oder die Art der Anzeige festlegen. Folgende Angaben sind möglich:"

"inline = Erzwingt die Anzeige im Text - das Element wird im laufenden Textfluss angezeigt."

Irgendwas mache ich hier doch total falsch?

Danke für die Hilfe

Grüsse

24.01.2007 - 08:01 Uhr

UserControl = ascx Datei mit HTML quelltext etcs. (Designer vorhanden) etc.
Klassisches Beispiel;
--> Wenn du im Team an ner Software arbeitest, lagerst du visuelle Sachen die du mehrfach brauchst in nen Control aus.

CustomControl = kompilierte Assembly, ohne HTML quelltext (wird an die ASP.NET engine mit nem Renderer oder so übergeben). Kein Designer vorhanden.
--> Eher für Komponenten-Hersteller ala Infragistics geeignet (da sie nur ne Assembly ausliefern müssen) klassisches Beispiel n eigener "Button" oder ein eigenes "Grid".

Components (ComponentClasses) ist ne kompilierte Assembly die keine Visuelle gestaltung zulässt (selbst nicht "direkt" sichtbar ist). Für gewöhnlich, erscheinen dieses Components am unteren Rand der VS2003/2005 IDE (typisches Beispiel ist ne ImageList).
--> Sinvoll in beiden Einsatzgebieten, sofern man die Komponente nicht direkt sehen muss.

http://www.dotnetframework.de/glossar/dotnet/400/User%20Control.aspx

Mit "selbst nicht direkt sichtbar" meine ich, dass es zwar n Icon oder so da hat in der IDE indiziert das die Komponente verwendet wird, die Komponente selber ist aber nicht visuell. (auch wenn sie selbst wiederum Forms etc. erstellen/anzeigen könnte)

Gruss

23.01.2007 - 08:32 Uhr

Haha, viel Spass mit den Regular Expressions! 😁

Ach ja, versuch nicht sie selbst zu bauen sondern geh dir fetige Regex'e aus dem Internet suchen, ist mein Tipp 🙂.

Hier n Tutorial http://www.regular-expressions.info/

Hier kanns du suchen;

http://regexlib.com/default.aspx

Aber frag nicht die andern Leute, wir alle wissen das RegEx krank ist also bitte belaste nicht die andern damit 😉

Gruss
Lexy

23.01.2007 - 08:20 Uhr

Original von herbivore
Hallo ZiMD,

naja, schützen ist ja schon ok. Aber das das Abschalten ist ja eine Form der Selbstjustiz.

herbivore

So hab ichs noch nie gesehen, toll gesagt!

/signed

23.01.2007 - 08:16 Uhr

Hmm, kauf dir doch einfach ne Buchhaltungssoftware?
Oder pass was an das OpenSource ist?

Fibu Software gibts doch schon relativ billig...
Ich weiss jetzt nicht wie teuer du bist, aber ich kann mir kaum vorstellen dass du die Kosten die du selbst verursachst mit selbst erstellter software rausholst (vorallem mit den Ansprüchen die du hast)

Nehmen wir an du verdienst so 3000€ (denke eher mehr) und du arbeitest an sonem Projekt und du verbrauchst bloss ne Woche (das ist meiner Meinung nach nur die Analyse)dann kostest das bereits knappe 800€ ... für das Geld kriegst du mit sicherheit nen fertiges "KMU" FIBU Produkt.

Dieses Produkt würde ich dann anpassen, resp. die Schnittstelle(n) dazu verwenden um die Daten in dein System/von deinem System zu überführen.

Fände ich selbst sogar hochinteressant (du siehst viel in die Materie, muss aber nicht die ganzen standard Sachen machen ala DB Connect,Sec Checks, Usability etc.)

Aber wie gesagt, wenn du die Zeit hast (dir nehmen willst) dann kannst du das auch anders machen.

Gruss

19.01.2007 - 09:40 Uhr

Hallo zusammen

Ich möchte meinen Textboxen eine dynamische breite zuweisen und brauche dazu die Font die im StyleSheet steht.

Kann mir wer sagen wo ich diese Font-Infos herbekomme?

Habs schon im Page Load auf den Controls mit .FontName probiert, dieses FontName-Prop ist aber leer. --> string.Empty, nicht null.

Im PageHeader.StyleSheet bin ich auch irgendwie nicht auf den aktuellen gekommen.

Wir verwenden Theming bei unserer Web-App, der Kunde kann die Fonts in den Stylesheets selbst anpassen. (Was dann schlussendlich für ne Font im Browser verwendet wird ist mir egal, mich interessiert zuerst nur mal die die auf der Page oder den jeweiligen Controls gültig ist).

Am tollsten wäre es, wenn ich dieses Pro Control herausfinden könnte (da der Kunde diese Controls theoretisch einzeln Stylen könnte) mir würde aber pro Page oder so vorerst ausreichen.

@Edit: Es steht alles schon, styles werden korrekt gesetzt und so ich muss nur vom verwendeten Style die Font-Family haben...

Danke für die Hilfe

Mfg

Lex

18.01.2007 - 14:22 Uhr

So will auch noch was gesagt haben;

Ich glaube das mit dem Absteigenden Ast stimmt nicht mal ansatzweise.
Meine Meinung ist, das JAVA und .NET nie direkt konkurieren werden und keines der beiden das andere verdrängen wird.

Die Einsatzzwecke der beiden Frameworks sind relativ klar.

.NET ist eigentlich nur die zukünftige "Windows-API", am Anfang in aller Munde jetzt beginnen die Firmen langsam umzusteigen.

Bis die Windows Welt umgestellt hat vergeht bekannterweise einige Zeit.

.NET ist nicht für die Portierung für andere Systeme geignet! Es enthält total Windows-spezifische funktionen die auf anderen System nie existieren werden.

JAVA hat dies nicht.

Wer also sein Produkt primär für Windows verwendet, wird wohl .NET nehmen.
Wer Plattformunabghängikeit benötigt wird JAVA nehmen, fertig.

Im Moment ist es einfach so das man noch sehr viele Sachen noch in VB6(oder Delphi,C++ etc.) machen kann und auch keinen wirklichen Druck hat auf .NET umzusteigen. --> Wenn Microsoft ihr Konzept der Abwärtskompatibilität weiterfährt, wird es auch noch lange so bleiben.

Wer Plattformunabhängig sein möchte, muss den Umstieg auf JAVA sofort machen (weils sonst ganz einfach überhaupt nichts gibt).

C# und .NET ist ganz klar die Zukunft für Windows.

Gruss

16.01.2007 - 10:05 Uhr

Mal noch ne Frage;

Wie würde man theoretisch, gemäss CSS urstandard, diese Aufgabe mit den 2 Buttons (oder Exemplarisch 2 Divs in einem umgebenden Div) Lösen?

Also 2 Divs in nem Div, eine Div Links ein Div rechts...

Und ich meine so das es nachher "perfekt ist". --> gemäs Standard, egal ob es dann im Browser sch**** aussieht.

d.H

  • Kein Float --> (weil der umgebende Container dann nicht mehr automatisch die Höhe nach Inhalt ausrichtet)

  • Kein Margin-Left oder Right 100% --> setzt Float voraus + Kann mir zusätzlich kaum vorstellen das n Margin überhaupt für sowas verwendet werden sollte...

  • Kein "position:Abosolut; right=0" --> Begründung hier wie beim Float, der umgebende Div richtet sich dann nicht mehr dem Inhalt aus.
    @Edit: Das hier funzt nur bei gewissen Elementen, wendet man dies Auf InputButtons an, wie weiter oben im Post, gehts.
    Also, meine Frage;
    Wie mache ich das in CSS theoretisch richtig, egal wie der Standard von den Browsern interpretiert wird, wie wäre es standardmässig sauber? Auch wenn es keinen Browser gibt der das richtig interpretiert.

Danke für die Antwort

@Edit2: Ich habe jeweils zur Prüfung was der Standard wäre, Firefox genommen was nicht 100% sauber ist. Aufgrund dieser Prüfungen habe ich die 3 oberen Varianten ausgeschlossen, sollte einer dieser Variante aber tatsächlich "standardmässig richtig" sein, ist das natürlich ok.

09.01.2007 - 11:29 Uhr

@VizOne

Oh, danke vielmals ist "genau" das was ich gesucht habe, jetzt hab ich meinen Workflow.

09.01.2007 - 11:08 Uhr

Original von Chris06
Hast du schon die Events im Eigenschaften Fenster gesehen?
Wenn du z.b. einen Button markierst, rechts das Eigenschaften-Fenster öffnest, dann ist oben so ein gelber Blitz, darin findest du alle Ereignisse.
Bei einem Doppelklick wird automatisch die Funktion erstellt.

Wenn du dein Event in der form nicht findest, wirst du es wohl selbst tippen müssen.

Ah Ok, hab auch n Artikel gefunden;
http://odetocode.com/Blogs/scott/archive/2006/02/16/2914.aspx

Erklärt kurz was es auf sich hat mit Event-WireUP wie es in VB und C# gemacht wird blablabla (wieder mal unterschiedliche Features in den Sprachen die nicht sein müssten).

Ich mach es im Moment so;

Ich definiere das Event so wie ich es mir von der Windows Programmierung gewöhnt bin;

Page.PreInit += Handler --> hier kommt dann die Autovervollständigung mittels Tab.

Das generiert mir den Rumpf.
Danach lösche ich
Page.PreInit += Handler, lasse die Methode aber stehen.
Das Funktioniert.

Ist aus meiner Sicht immo ein wenig beknackt, aber egal es funzt ja. (In VB gibts anscheinend nen richtigen Weg, was mir nicht in den Kopf geht wieso das in C# nicht geht...)

Will mich hier aber nicht über Design und Architektur von .NET beschweren...

Danke nochmals und Gruss
Lex

09.01.2007 - 10:24 Uhr

Danke VizOne

Zu Möglichkeit 3;

Wie kann ich diesen Vorgang anstossen, so das diese Methode generiert wird?
AutoEventWireUp ist an.

(Bei ner Page muss ich ja doppelklicken, damit der Rumpf der Page Load Methode generiert wird)

Danke

09.01.2007 - 10:01 Uhr

Hallo Leute

Ich werd wahrscheinlich hier weggebannt nach dieses Frage, aber ich bin so verzweifelt das ich es in kauf nehme 😄.

Wie kann ich auf den Page.PreInit Event reagieren? (Page load muss ich ins Form doppelclicken xD, wie sieht der weg aber bei allen andern Events aus?)

mit protected override void bekomm ich es nicht und mit dem klassichen "Page.PreInit += new Handler" von Winforms her, erziel ich wohl kaum ein Ergebnis.

Danke für die Hilfe

Gruss Lex

27.12.2006 - 10:13 Uhr

Mir gehts mehr um die Schreibweise deines Namens😉

Hab mir fast die Finger gebrochen...

Hmm wenn du von zweitem Modul sprichst hört sich das eher nach marsgk Idee mit der zweiten AppDomain an...

Hauptsache Problem ist nicht mehr Problem...

Gruss

22.12.2006 - 14:10 Uhr

Original von marsgk
Du kannst ja die Assemblies in eine zweite AppDomain laden und dort ausführen. Diese kannst du dann einfach entladen und der Speicher ist wieder frei.

Durchaus ne Möglichkeit, wenn du im Code aber Objekte verwendest / referenzierst die von deine primären AppDomain stammen, musst du deren Zustand in der zweiten AppDomain genau so zur verfügung stellen wie in der ersten AppDomain. (Weils "isoliert" ist).

Das kann ziemlich ausarten denke ich.

22.12.2006 - 13:57 Uhr

Hallo dN!3L (was für ein Name 😄)

Kann auch gut sein, das nicht dein Compiler viel Speicher frist, sondern die Assemblies die du generierst. Wir machen bei unserer Software regen gebrauch vom Kompiler, wir hatten das gleiche Problem.

Assemblies die du kreierst kannst du von der App-Domain nicht mehr entladen, ausser du entlädst die ganze Appdomain ^^. --> Programm beenden.

Was du machen könntest (wir können uns das leisten).

Chache deine Assemblies;

Du wirst ja Code haben der dann deine Assemblie ausmacht, nimm diesen Code in Form eines Textstrings als Key in ne Hashtable und speichere unter diesem Key das dazugehörige Assembly ab. (Ich weiss bei grossen Sharp-Scripts has du da ziemlich deftige keys). Wenn du jetzt Code Kompilieren sollst schaust du zuerst nach ob der Code in dieser Form schonmal Kompiliert wurde und wenn ja hol dir das Assembly aus deiner Hashtable. Anderen Falls musst du das Assembly neu erstellen und wirst es nicht entladen können.

Wenn der Code den du kompilierst, extrem verschieden ist und du dieses "Caching" nicht so umsetzen kannst glaube ich musst du mit dem Speicher verbrauch leben.

Bei uns geht das ganz gut, aber auch im unserer Fall gibts es mühsame Speicherfress-Situtationen.

Wenn z.B. einer unserer Consultants, C# Scripte erstellt und diese testet, so bedeutet dies dass bei jedem Test ne Assembly generiert/gestartet wird. Diese Assemblys kann das Framework nicht entladen.

Haben wir also jemanden der das gleiche Script, per "trial and error" editiert und dann immer wieder testet obs durchläuft (weil er nicht so sattelfest ist in C#) steigt unser Memory verbrauch dermassen an, dass es wehtut. Wir haben leider keine Andere möglichkeit als diesem Consultat zu sagen dass er dann von Zeit zu Zeit die Anwendung schliessen muss.

Ich hoffe ich habe dir irgendwie geholfen

"offiziell"
http://blogs.msdn.com/jasonz/archive/2004/05/31/145105.aspx
http://blogs.msdn.com/suzcook/archive/2003/07/08/57211.aspx

@Edit Links eingefügt.

Gruss Lex

15.12.2006 - 13:41 Uhr

Hallo Herbivore, Hallo Sirox

Mein Fazit ist: Kooperative Konzepte sind nicht unproblematisch, können aber durchaus funktionieren.

Jop, das ist ziemlich genau das worauf ich hinweisen wollte, dass es funktionieren kann aber problematisch sein kann. --> Wenns nur einen Listener gibt gibts die ganze Problematik nicht, da keine Koorperation von mehreren Handlern vorhanden ist.

Was ich im Moment nicht (noch nicht) verstehe.

Sirox hat vor die EventArgs-Klasse so zu schreiben, dass ein true nicht mehr durch ein false überschrieben werden kann. Der von dir beschrieben Fall kann dann gerade nicht eintreten.

Mich interessiert der Fall, wenn der erste EventHandler das Propertie Cancel überprüft, und im Fall von False, dann seine abbauende Arbeit fortsetzt/beginnt.

Der zweite setzt es dann auf true, und macht die Abbaunde arbeit nicht. Für mich von aussen ist dies "unkontrollierbares Verhalten".
--> würde man die Reihenfolge drehen würde es dann richtig Funktonieren.

Wenn dein Eventhandler garnichts macht, ausser dieses Property zu setzen und das Form wo du dich beim Closeevent dran hängst, dann selbst überprüft ob einer der Eventhandler das Property gesetzt hat und sich dann abbaut oder nicht ist es kein Problem --> wenn der Forumstarter das so macht, sind alle meine Problematiken die ich hier gepostet habe nichtig.

Ich bin davon ausgegangen das auf den Cancel-Event noch abbaunde Funktionen folgen.

Bin einfach durch den Teil in unserer Software der eben genau so geschrieben war ziemlich vorsichtig. (Ein Bohnen-Entwickler mit langjähriger Erfahrung hat bei uns begonnen und kennt Events als klassiche "benachrichtigung" in eine Richtung vom "subject" zum "abonnenten". "obeserver pattern" -> so kenn ich es von meiner Ausbildung auch.
Davon ausgehend hat er gewisse Sachen gemacht, später ist dann ausgekommen, dass im betroffenen Projekt, starkes Fehlverhalten aufgetreten ist, je nach reihenfolge in der man den Eventhandler ans Event gehängt hat.

Es hatte nichts mit Winforms zu tun war aber wie folgt (exemplarisch);

objekt.Close += "closehandler1"
objekt.Close += "closehandler2"

hat so funktioniert wie es sollte.

objekt.Close += "closehandler2"
objekt.Close += "closehandler1"

hat komisch reagiert.

Wird ein neues Objekt vom gleichen Typ programmiert und erstellt wird, so muss der der auf die Events reagiert (die Eventhandler programmiert), in gleicher Reihenfolge die Events registrieren wie sie im bestehenden Objekt/in der bestehenden Implementation gemacht wurden. --> Das muss sehr genau Dokumentiert/kommuniziert werden.

Alles in allem wollte ich nur auf die Problematik hinweisen (wir haben hier n ziemlichen Ärger/Wartungsaufwand weil wir es kaum in den Griff bekommen). --> Wir müssen es ganz einfach neu designen.

@Edit: Schreib und Tippfehler

@Edit2: Ist nur meine Meinung, aber ich finde n Entwickler hat prinzipiell "koorperativ", also davon ausgehend das andere seinen Code erweitern, zu schreiben. Kommentare werden ja auch teilweise aus diesem Grund geschrieben.

15.12.2006 - 11:32 Uhr

weil sonst bekommt Cancel immer den Wert, den ihn der zu letzt aufgerufene Handler ihm zuteilt.
Und so bleibt er true wenn ihn irgendein Handler auf true setzt.

Genau das meine ich, der erste Handler ist durch, hat cancel geprüft und es war false, der zweite handler setzt es jetzt aber auf true, müsste dann nicht der erste handler seine Arbeit rückgängig machen?

15.12.2006 - 11:25 Uhr

jop haste schon recht.

e.handled oder e.cancel ist ja vom Winforms. Und im normal Fall hört dort eine Komponente (oder objekt ist ja egal) auf ein Event.

Nehmen wir an du hättest nen Form.

Zwei listener hören auf den Form_Close Event. Jetzt wird das Form geclosed, und du sagst e.Cancel = true.

Was dem Form sagt, es solle das Canceln abbrechen (wenn er z.b auf das x in der rechten oberen Ecke gedrückt hat).

Nun hiesse das ja theoretisch, dass sich das Form eigentlich garnicht Closed (weil es ja gecancelt wurde).

Der zweite Handler denkt aber das Event passiert nur dann, wenn das Form auch wirklich geclosed wird. (ist n gutes Beispiel weil cancel.true eigentlich bedeuten würde das das close event garnicht erst gefeurt wird)
Jetzt fängts an Sachen abzubauen die noch bleiben sollten (da der Close-Vorgang ja gecancelt ist).

If cancel=true kannst du dann nur sagen wenn du weisst dass du "der zweite" bist und der andere Event-Handler zwingend vor dir aufgerufen wird. --> Das kannst du nicht garantieren nur durch den logischen Fluss der Software.

Denn wenn du sagst if cancel=true -->cancel, der andere Eventhandler kommt doch nach dir und sagt cancel=false, was machst du dann?

Wer gewinnt nun? Was ist richtig? Canceln oder nicht?

Für sowas gibts eigentlich das MVC pattern.

@edit, wie beim ersten Post gesagt, wenns nur einen Listener gibt ist es vertretbar

15.12.2006 - 10:55 Uhr

Original von herbivore
Hallo Lexodus,

deinen Einwand verstehe ich nicht. Dagegen den EventArgs eine Property aufzunehmen, die von den EventHandler gesetzt und von dem Event ausgewertet wird, spricht m.E. nichts. Natürlich können sich mehrer EventHandler da in die Querere kommen, aber Möglichkeiten falsch zu Programmieren gibt es an vielen Stellen. Jeder einzelne EventHandler muss dann natürlich so geschrieben sein, dass er damit rechnet, dass die Property von anderen EventHandlern vor und nach ebenfalls benutzt wird. Dann ist alles gut.

herbivore

Genau "EventHandler muss dann natürlich so geschrieben sein, dass er damit rechnet"

das macht deine Architektur kaputt.

Normalerweise rechnet man aber nicht damit weil Events klassicher-weise nur zum verteilen von Infos oder zuständen verwendet werden.

Da Events zeitlich versetzt aufgerufen werden und du theoretisch nicht klar sagen kannst, wann welcher Listener aufgerufen wird, kann sich der Zustant des Objekts auf das du hörst von Event-Call zu Event-Call ändern. Was, wenn das Projekt wächst kaum mehr abhandler bar ist.

10 objekte hören auf das gleiche Event auf der gleichen Instanz. Einer der Handler sagt handled = true, einer sagt false, ein dritter macht sonstwas. Der "das letzte Wort" hat gewinnt, wer das ist weisst du nicht. (genausowenig die Reihenfolge).

Ausser du kennst die Software in alle Komponenten in und auswendig und weisst genau (aha, das bearbeiten Form wird zuerst aufgerufen, dann kommt das andere Form dann das dritte Form, mein drittes Form wird als letztes aufgerufen). Wenn mehrer Leute an einem Projekt arbeiten kannst du das vergessen (alle die am Proekte arbeiten müssten das ganze Projekt bis ins letzte Detail kennen)

Sollte irgendein anderer Entwickler der am Projekt arbeiten, das Editform auch noch verwenden und ist sich dessen nicht 100% bewusst, haste geiles verhalten.

Bei uns in der Software wurde ein teil so gelöst und wir mussten fast alles wegschmeissen. (Weil je nach dem welcher Listener zuerst aufgerufen wurde das Objekt einen anderen Zustand hatte).

Das ist echt schlimm. Ich such grad mal n Artikel.

Events oder Delegates sind nichts weiter als ein Observer Pattern;
http://www.dofactory.com/Patterns/PatternObserver.aspx

15.12.2006 - 10:12 Uhr

Hallo Sirox

Das was du machen möchtest, empfiehlt sich ausschliesslich dann wenn du mit 100%er sicherheit sagen kannst dass nur ein einziger Eventhandler zur Instanz des objektes das den Event wirft existiert.

Sollten mehrere Handler auf das gleiche Event der gleichen Instanz des Objekt registriert sein, wirst du je nach grösse deines Objektes starke Probleme bekommen.

Events sollten eigentlich Informationen nur verteilen und nicht empfangen. Das es in den Winforms so gemacht wird ist eigentlich ein DesignFehler. (Dort ist aber meist garantiert das nur ein Handler auf ein Event hört).

Für eine Architektur, bei der mehrere Listener auf den gleichen Event hören, wäre das fatal.

Gruss

15.12.2006 - 09:05 Uhr

Hab ne tolle Lösung bekommen, das hier Funktioniert sehr gut;


<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>

<style type="text/css">

.buttonContainer{
	border: 1px solid red;
	width: 100%;
	text-align: left;
	position: relative;
}

input[type]{
	width: 100px; /* only IE need this */
}

.leftAlign{

}

.rightAlign{
	position: absolute;
	right: 0;
}

</style>
	<div class="buttonContainer">
		<input type="button" value="left" class="leftAlign" />
		<input type="button" value="right" class="rightAlign" />
	</div>
</body>
</html>

15.12.2006 - 09:02 Uhr

@bubblez

WOW, Also erstmals danke! Hut ab du scheinst ein echter CSS-1337-Pro zu sein 🙂.

Die Lösung die du mir da gepostet hast, ist genau das was ich brauche. (Sieht in beiden Browsern fast genau gleich aus).
Werd das umgehend in unsere WebApp "einpflegen".

Ich muss aber ehrlicherweise sagen, ich habe keine Ahnung wieso der geparste Code dann so aussieht... --> aber das hebt die Pros von den Boons ab....
Da wäre ich im Leben nicht drauf gekommen.

".buttonContainer{
border: 1px solid red;
width: 100%;
text-align: left;
position: relative;
}
"

".rightAlign{
position: absolute;
right: 0;
}"

Einfach geil.

@schaedld
Sorry dass ich dir sowas in deinen Thread gepostet habe, mir gings ja darum, dass wenn du kein Pro bist es mit Tabellen einfacher machen könntest. (Ich hab an den beiden Buttons mit SelfHTML,Google, w3schools.net) Stunden verbrannt und bin zu keinem akzeptablen Resultat gekommen. Hab dann auf Tabellen geschwenkt (dort gings dann wesentlich einfach) das wollte ich dir nur sagen. (Wills dir nicht abschwatzen oder so).

--> Das Tabellen nicht "richtig" oder "sauber" sind ist mir bewusst, man kriegt aber mit wenig Aufwand viel hin (ohne Browserweiche oder n Pro zu sein).

Nochmals Danke an beide.

Gruss Lex

13.12.2006 - 13:19 Uhr

Original von Peter Bucher
Hallo Lexodus

Was soll den der Vorteil des gleichen Codes - oder der Nachteil eines Codes mit Browserweichen sein?
Wenn man es richtig anstellt, braucht man keine bis wenige Weichen od. Hacks.
Mit Layout Tabellen sollte man auf keinen Fall mehr arbeiten, es sprich zuviel dagegen. Siehe z.B. mein Link.

Gruss Peter

Ich habe nichts von Vor- und Nachteilen gesagt (das wollte ich nicht). Ich habe nur gesagt, dass wenn er keine Browserweiche stellt, es einige Sachen gibt die extrem schwer in beiden Browsern zu realisieren sind wenn nur div's oder Layouttags verwendet werden.

Verwendet man stattdessen Tabellen sehen diese Sachen in beiden Browsern gleich aus.

Fakt ist, Mozilla und IE6 haben ein sehr unterschiedlich ausgereiftes Verständis von CSS und Layoutelementen.
Was bei Tabellen nicht der Fall ist, resp. viel weniger (da die letzten 10jahre alles mit Tabellen gemacht wurde).

Das ich Tabellen nehme, statt Divs kann von Aussen als "bequem" gesehen werden. Für mich ist es ganz klar nicht verkaufbar.

Wenn ein Kunde eine Seite will, oder in meinem Fall ein Feature in der Web-Applikation, so muss ich ganz einfach schauen dass die Arbeit mit bestmöglicher Effizienz gemacht wird.

Eine Browserweiche würde bedeuten, dass der Aufwand erhöht wird weil ich die Seite "doppelt" baue. Also probier ich ohne Browserweiche auszukommen.

Wenn ich das mache, mache ich es so dass es in beiden Browsern das bestmögliche Resultat ergibt. Kann ich dieses Resultat mit Layout Elementen nicht erreichen (von mir aus weil IE6 dazu nicht in der Lage ist), so mache ich es mit Tabellen-Elementen, die in IE6 und Mozilla im Groben und Ganzen gleich aussehen.

Da gibts nichts dran zu wackeln, weil ich den Weg der Browserweiche nicht gehen/kann will.
Dieser Weg ist/wäre der sauberste, darüber will ich nicht diskutieren. Bedeutet aber mehr Aufwand.

Wenn es dir darum geht, dass du 100% sicher bist das fast alles mit Layout-Elementen und CSS möglich ist und ich Aufgrund von falschem Anwenden meinerseits diese Meinung entstanden ist, so würde ich dir gerne einen Link zu meinem Beispiel posten.

Ich wollte bei unserer Web-App auch alles mit DIV's in der gleichen Page machen. Bin aber schon bei den banalsten Sachen gebrandet, weil die Browser ein so unterschiedliches Verständnis von CSS und Layout haben. (Wieso auch immer).

Ich hätte es nur mit browser-Weiche geschaft. Ich scheue mich einfach noch vor dem Aufwand (weil es ja mit Tabellen geht).

@Edit: Das Beispiel das ich damals gepostet hatte und in beiden Browsern gleich aussehen sollte wurde mit keinem Post so beantwortet das es eine zufriedenstellende Lösung gegeben hätte.

@Edit2: Beispiel sieht grob so aus;

Umgebendes DIV element. Darin sind zwei Input-Buttons.
Der eine Inputbutton sollte links anliegen der andere Rechts.

  1. Einschränkung: Floating kann hier nicht verwenden weil es mir den umgebenden "Fluss" bricht, sich das umgebende DIV Element nicht mehr dem Inhalt(also den 2 Buttons) in der Höhe ausrichtet.
  2. Ich kann die Höhe des umgebenden DIV Elements nicht setzen, weil ich sie nicht weiss und weil sie sich ja der Grösse der Knöpfe ausrichten soll.
  3. Margin Left 0 margin right 100% und umgekehrt funktioniert auf Input-Buttons nicht richtig !? (frag mich nicht wieso) auf gewissen andern Elementen funktioniert es. --> wurde mir damals als Lösung vorgeschlagen, teilweise in Kombi mit Floating.
    Schnellste und "effizienteste" Lösung war hier, Tabellen zu verwenden.

Gruss

Lex

13.12.2006 - 09:51 Uhr

Ich glaube alles zusammen war ein klassisches 80% Syndrom... 🙂

Niemand ist davor geschützt^^

13.12.2006 - 09:49 Uhr

Hallo zusammen

Ich bin auf der Suche nach Links zu Entwicklerportalseiten, könnt ihr mir da einige Empfehlen? --> google.ch als Startseite sollte dieser dann weichen 😉

  • Sie sollte in deutscher oder englischer Sprache sein.
  • nicht unbedingt nur C# (Entwicklerszene, Security, allgemein Sachen)
    ein Blick über den Tellerrand ala Mac-Programmierung wäre schön aber nicht wirklich ein muss.
  • sollte aktuell sein
  • Szenenews und trends sollten vielleicht per RSS-Feeds verfügbar sein.

Die Seite soll Spass machen (vom Look and Feel).
Ich mein das wie der Vergleich mycsharp und dem offiziellen Forum von ASP.NET.

ASP.NET mag bekannt sein und so riesig, mit vielen Leuten aber für mich persönlich macht es einfach nicht so Spass, ist nicht so schön und hat keine so tollen features wie

//Syntaxhighlighting

.

Könnt ihr mir da weiterhelfen?

Danke für eure Tipps

13.12.2006 - 09:21 Uhr

Hallo zusammen

Im Bezug auf Div's und Layout-Elemente habe ich eine Erfahrung gemacht;

Du bekommst die Page kaum/garnicht so hin, dass sie auf IE6 und Mozilla gleich aussieht.
Ausser du stellst ne Browser-Weiche.

Wenn du möchtest das deine Page in Mozilla und IE6 bei gleichem Code sehr ähnlich aussehen tut, würde ich es mit Tabellen machen.

Gruss

Lex

07.12.2006 - 16:02 Uhr

omfg, wer lesen kann ist klar im Vorteil....

sorry

07.12.2006 - 15:24 Uhr

Hallo Wakestar

Meine Fragen:

A. Muss ich nun vor jeder Methode das [STAThread] setzen? Es kann ja sein dass diesselbe Methode vom COM-Client (innerhalb der Instanz) mehrmals aufgerufen wird...

Nein musst du nicht.

STAThread steht für single threaded apartment (thread) und bedeutet mehr oder weniger das deine Main Methode singlethreaded läuft.

Dieses Statement brauchst du nur bei Mainmethoden. (Da das System dein Program aufruft hast du ja sonst keine Möglichkeit dich selbst zu multithreaden).

Wenn du keine Ausführbare Datei schreibst brauchst du auch kein Main.

Irgendwo hast du ein Attribut [Comvisible=false] beim Event oder delegate


[ComVisible(false)]
public delegate void FileDroppedEvent(string Filename);

Hats vielleicht damit zu tun? Wenn nicht mach bitte den Delegaten privat der hat in der "Schnittstelle" dann nichts verloren.
Ich denke mit dem Artikel wirst du schon auf dem richtigen Weg sein, irgendwo wirst du wohl nen kleinen Fehler haben (habe mit ComInterop zu wenig Erfahrung).

@Edit: Das hier System.Threading.Thread.CurrentThread.SetApartmentState(System.Threading.ApartmentState.STA)
musst/solltest du m.A 🙂 nicht machen.

@Edit2: 20sekunden 🙂 http://www.codeproject.com/com/CCOMThread.asp

@Edit3: Was wegeditiert das ich missverstanden habe^^
Gruss

06.12.2006 - 09:34 Uhr

Hmm kannst du mir sagen wo?

Hab nicht wirklich was gefunden.

Hier ist der Text zur Conversion aus dem Link den du gepostet hast;

Converting Colors

Throughout the ColorWheel class and the sample project, the code needs to convert color values between RGB and HSV format. Generally, the code uses HSV format for most internal uses—it closely maps to the way the colors are represented on the screen—but uses RGB values when interacting with the user or when displaying the selected color on the screen. Although I made a valiant attempt at working out the conversion formulas during a cross-country flight, once I reconnected and did a quick search, I found several sites listing pretty much the same algorithm in several different languages, but none in C# or Visual Basic .NET. I converted the code to C# and Visual Basic .NET, and the ColorHandler class in the sample project provides shared/static methods that handle the conversions between RGB and HSV. The class also contains HSV and RGB structures that are used throughout the application. They are simple and provide an easy way to cart around RGB and HSV values.

Specifically, the ColorHandler class provides HSVToRGB, RGBToHSV, and HSVToColor methods that perform the color conversions. The Color structure within the .NET Framework provides FromArgb and ToArgb methods, so there's no need to create those methods here. If you're interested in the details of performing the conversions to and from the HSV color scheme, check out the code in the ColorHandler class. I haven't focused on this code here, as you're unlikely to need to modify the code for use in other projects—you can simply import the code or package it in any way you like for reuse.

It is important to note, however, that both the HSVToRGB and RGBToHSV methods expect that the individual color components—the R, G, B and H, S, V values—contain integers between 0 and 255. Although there's no reason that these exact values must be used, I chose to maintain consistency between the two color spaces, using the same range for both. If you want to handle the color values in a different way, you'll need to modify the code in the ColorHandler class.

@Edit, ah ich glaube du meinst ich müsste das Sample Projekt runterladen? Okok das hab ich jetzt nicht gemacht 🙂

05.12.2006 - 11:27 Uhr

Das ist der Code;


		/// <summary>
		/// Converts HSB Color components to an RGB System.Drawing.Color
		/// </summary>
		/// <param name="Hue">Hue component</param>
		/// <param name="Saturation">Saturation component</param>
		/// <param name="Brightness">Brightness component</param>
		/// <returns>Returns the RGB value as a System.Drawing.Color</returns>
		public static Color HSBToRGB(int Hue, float Saturation, float Brightness)	{
			// TODO: CheckHSBValues(Hue, Saturation, Brightness);
			int red = 0; int green = 0; int blue = 0;
			if(Saturation == 0.0f)
			{
				// Achromatic Color (black and white centre line)
				// Hue should be 0 (undefined), but we'll ignore it.
				// Set shade of grey
				red = green = blue = (int)(Brightness * 255);
			}
			else
			{
				// Chromatic Color
				// Map hue from [0-255] to [0-360] to hexagonal-space [0-6]
				// (360 / 256) * hue[0-255] / 60
				float fHexHue = (6.0f / 360.0f) * Hue;
				// Determine sector in hexagonal-space (RGB cube projection) {0,1,2,3,4,5}
				float fHexSector = (float)Math.Floor((double)fHexHue);
				// Determine exact position in particular sector [0-1]
				float fHexSectorPos = fHexHue - fHexSector;

				// Convert parameters to in-formula ranges
				float fBrightness = Brightness * 255.0f;
				float fSaturation = Saturation/*(float)Saturation * (1.0f / 360.0f)*/;

				// Magic formulas (from Foley & Van Dam). Adding 0.5 performs rounding instead of truncation
				byte bWashOut = (byte)(0.5f + fBrightness * (1.0f - fSaturation));
				byte bHueModifierOddSector = (byte)(0.5f + fBrightness * (1.0f - fSaturation * fHexSectorPos));
				byte bHueModifierEvenSector = (byte)(0.5f + fBrightness * (1.0f - fSaturation * (1.0f - fHexSectorPos)));

				// Assign values to RGB components (sector dependent)
				switch((int)fHexSector)	{
					case 0 :
						// Hue is between red & yellow
						red = (int)(Brightness * 255); green = bHueModifierEvenSector; blue = bWashOut;
						break;
					case 1 :
						// Hue is between yellow & green
						red = bHueModifierOddSector; green = (int)(Brightness * 255); blue = bWashOut;
						break;
					case 2 :
						// Hue is between green & cyan
						red = bWashOut; green = (int)(Brightness * 255); blue = bHueModifierEvenSector;
						break;
					case 3 :
						// Hue is between cyan & blue
						red = bWashOut; green = bHueModifierOddSector; blue = (int)(Brightness * 255);
						break;
					case 4 :
						// Hue is between blue & magenta
						red = bHueModifierEvenSector; green = bWashOut; blue = (int)(Brightness * 255);
						break;
					case 5 :
						// Hue is between magenta & red
						red = (int)(Brightness * 255); green = bWashOut; blue = bHueModifierOddSector;
						break;
					default :
						red = 0; green = 0; blue = 0;
						break;
				}
			}

			return Color.FromArgb(red, green, blue);
		}

@edit: Nachtrag, das ist die Sorte code die man nicht mehr versteht, ab dem Zeitpunkt ab dem man sie im Sourceverwaltungssystem eingecheckt hat.

05.12.2006 - 11:26 Uhr

Hmmm danke an beide.

Ja ich arbeite mit Controls, habe aber gedacht um dieses Sample zu verwenden brauche ich zusätzliche GDI+ komponenten. (also eigentlich normales GDI welches ich einbinden muss, das kam für mich nicht in frage).
Ich habe mich unklar ausgedrückt.
Da meine Annahme aber falsch war/ist und GDI+ das sowieso nicht kann ist es aber nicht so schlimm.

(Die "Standard" GDI+ Komponenten (Windows Oberflächen SDK oder wie man dem sagen will) können das nicht was ich möchte (also von HSV nach RGB)

In dem Beispiel von dir und mir, sieht man die Formel nie, sie verwenden immer "Pseudo-Code".
http://msdn.microsoft.com/msdnmag/issues/03/07/GDIColorPicker/#S3
http://msdn.microsoft.com/msdnmag/issues/05/09/AdvancedBasics/#S1

Bloss hier ist die Formel erklärt;
http://www.codeproject.com/miscctrl/CPic...&select=1017197

Und ich werde es wohl auch so machen (gibt sonst wohl nichts).

Nochmals danke an beide.

Gruss Lex

05.12.2006 - 09:56 Uhr

Coderichtlinien sind doch sowieso zu 99% nur Feigenblätter für nicht gelebte SW-Prozesse.

Oh mann der Satz ist schon fast lyrisch, du solltest Philosoph werden oder so🙂
Nice said!

zur CLS Compliance;

Zwei identifizierer dürfen sich nicht nur im casing unterscheiden. Deshalb kommst du um nen Prefix eigentlich nicht wirklich drum rum...

Genau wegen dieser komischen Sprache Namens VB.net 🙂 die ja kein Casing kennt....

04.12.2006 - 15:01 Uhr

Hallo zusammen

Ich möchte statt mit dem RGB Farbraum mit dem HSV Farbraum arbeiten.

Und zwar wollt ich eigentlich gerne, von gewissen HSV Werten eine RGB Farbe erstellen lassen und diese dann meinen Controls zuweisen.

Muss ich das mit einer Formel machen oder gibts da nicht schon was vorgefertigtes?
Formel hab ich (glaub) gefunden; http://www.codeproject.com/miscctrl/CPicker.asp?df=100&forumid=141207&exp=0&select=1017197
Könnte ich mir vorstellen.

In GDI+ gibts wohl soetwas;
http://msdn.microsoft.com/msdnmag/issues/05/09/AdvancedBasics/#S1
GDI+ kommt für mich aber nicht in Frage.

Im Framework selbst finde ich nur die Color Klasse, welche mir die Konvertierung von RGB nach HSV macht. (ColorConverter macht irgendwie nur komische sachen😉

Danke für die Hilfe

MfG

30.11.2006 - 15:54 Uhr

@Kabelsalat

100% richtig, eine Methode darf sich nicht nur in ihrem Rückgabewert unterscheiden.

Dieses Property hätten sie aber schlicht und einfach als obsolete markieren können und was anders nehmen.

AppDomain.SetShadowCopyFiles() obsoloete, genau so wie AppDomainSetup.ShadowCopyFiles.

Und was richtiges nehmen.

So grundsätzlich markiert man Sachen als obsolote, weil man früher nen Fehler gemacht hat, oder das design verbessert werden konnte.

Wenn das "richtige" aber auch wieder was ist das vom Design her grottig ist dann komm ich ins grübeln...

30.11.2006 - 15:44 Uhr

Original von svenson

Original von talla
Es ist nur ein kleiner Designfehler der API!

Aber was für einer! 😉

Auf jeden Fall so anfängerhaft, dass man mit Freude drüber lästern kann. Ob es nun einer unter 10, 100 oder einer Million ist, spielt keine Rolle. Der Fehler bleibt gleich grausam. Man kann allenfalls Verständnis für die Qualitätskontrolle bei MS aufbringen, die den Fehler übersehen hat, nicht aber für den Entwickler bzw. für das Team, der diese Schnittstelle geschrieben hat (das ist ja mit Vorsatz geschehen). Ob das Framework insgesamt gut oder schlecht ist, kann man nicht an der Kritik an einer Schnittstelle festmachen. Ebensowenig kann aber die Kritik durch die (gute) Gesamtqualität des Frameworks wegdiskutiert werden.

Müll bleibt Müll, und das IST Müll.

Möchte mich dem hier anschliessen 🙂

30.11.2006 - 15:42 Uhr

Sorry vielleicht hab ich mich falsch ausgedrückt.

Der Fehler an und für sich, ist ganz gaaaanz klein.
In meinem Programmierverständis müssten alle Alarmglocken klingeln und jedem die Haar zu berge stehen wenn einer mit nem Vorschlag kommt nen bool als string zu übergeben... daher find ich es ja so extrem.

Gibt viel "gröbere" Fehler im Framework, die sind aber nicht so schlimm von der Denkweise her.

30.11.2006 - 15:26 Uhr

Ziel der Kritik;

  • Frust ablassen
  • Sehen ob die Kritik stimmt oder nicht.
  • Sehen wie frustriert andere damit sind --> Frust ist dann komplett abgelassen.
  • Lernen das Microsoftmenschen auch Fehler machen.
  • Ab diesem Zeitpunkt kehrt der Humor zurück und die Freude am Framwork😉

Das ist das Ziel. Und du Herbivore/Ihr habt mir geholfen 😉
Ich bin wieder im Jin/Jang.

Der hall of shame link hat mich schon ziemlich aufgebaut ...

30.11.2006 - 15:12 Uhr

Also grundsätzlich muss ich sagen, versteh ich hier auch die Gegenargumente...

Menschen machen Fehler... is richtig....

Finde aber es kommt darauf an was für n Fehler.

Mit dem Framework ist alles so toll typisiert und objektorientiert klasse. Konzept schon langa von der Java Welt verstanden jetzt auch von Microsoft.

Umdenken bitte weg von komischer VB-Programmierdenkweise zu richtiger objektorientiert heit. Und dann kommt sowas, dass geht mir einfach nicht in den Kopf.

Das ist nicht son einfacher/kleiner API design fehler mir kommt es so vor als ob nicht mal die Microsoft-Entwickler den Umstieg von VB auf ne richtig objektorientierte Sprache geschaft haben.

30.11.2006 - 14:58 Uhr

Ein Get Property in nen Get/Set Property umzuwandeln wird wohl nicht son Problem sein....

Sie haben es ja von "Get" Bool no Get/Set String geschafft....
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemappdomainclassshadowcopyfilestopic.asp

Und dann noch die Begründung;
"Weil interne Funktionen strings verwenden"

Ehrlich gesagt ist es mir egal was die intern machen, es hat mich auch nicht zu interessieren, von mir aus können sie intern an ihren strings ersticken. Dieser Mist hat in ner öffentlichen API aber nichts verloren.

Auf Deutsch, die sollen nen bool entgegen nehmen und ihn in ihrer Implementation auf nen string drehen und nicht wir.

Mit n bischen Pech, gibts wie früher n Deutsches VB.NET das "wahr" und "falsch" verwendet.... oh Gott ich hoffe nicht.

@Edit

kleine Missverständis, hab AppDomainSetup und AppDomain vermischt. Das Property war früher schon so da. War auf der AppDomain class ein wenig anders.
true und false als string mitzugeben find ich aber nachwievor shamig

30.11.2006 - 14:19 Uhr

omfg.

So geil, danke für den Link.

30.11.2006 - 14:00 Uhr

Hallo zusammen

Ich hoffe dieser Thread wird nicht gelöscht, weil ich irgendwo meinen Unmut über Microsoft und das .NET Framework kund tue. Aber mich würde einfach interessieren was sich Microsoft bei sowas denkt (vielleicht weiss einer von euch etwas);

http://msdn2.microsoft.com/de-de/library/system.appdomainsetup.shadowcopyfiles(VS.80).aspx

Das ist doch einfach nur ein Witz, das sowas überhaupt in ne API kommt ist überhaupt n Witz.

Für alle die den Link nicht lesen wollen...

Ich muss hier einem Get/Set property den Wert "true" und "false" als string übergeben... und das ist deren Ernst.

Wenn Microsoft so weitermacht programmier ich auf der Insel. Dort wird wenigstens nicht jeder mist in die API aufgenommen.

Gruss