Laden...
Avatar #avatar-2966.gif
Stipo myCSharp.de - Member
Elektroinstallateur Lörrach Dabei seit 09.04.2007 699 Beiträge
Benutzerbeschreibung

Forenbeiträge von Stipo Ingesamt 699 Beiträge

09.08.2010 - 22:35 Uhr

Hallo zusammen,

ich im Titel schon gesagt, suche ich ein Tool, womit man rekursiv durch alle Dateien in einem Verzeichnis incl Unterverzeichnisse nach einem Suchmuster suchen kann ( String Value )

Kennt Ihr da auf die schnelle ein kleines gutes Tool.
Sollte auch lauffähig auf 64bit sein.

Danke euch schon mal.

Grüße Stephan

08.08.2010 - 21:45 Uhr

Hallo,

du fügst nicht die Buttons aus dem UserControl dem Panel hinzu, sondern das UserControl selbst

panel1.Controls.Add(new UserControl1()); 

Somit gehören die Button immernoch zum UserControl und werden im UserControl verarbeitet.

Grüße Stephan

08.08.2010 - 16:41 Uhr

Hallo Tony,

warum das Rad neu erfinden. Nutze dafür einen Mailserver Dienst wie Postfix oder XMail und erstelle nur noch einen Admin Client, der die Datenbanken dann verwalten kann.

Grüße Stephan

01.08.2010 - 23:52 Uhr

Nochmal Hallo 😃

GEIL DAS GEHT 😃

Für alle, die eine Deutsche Version von Expression Blend haben.
Das Behavior ist zu finden in dem Fenster "Objekte -> Verhalten " .

Hier noch der Code dazu wie es funktioniert:


						<Button x:Name="button" 
							Style="{StaticResource customButtonStyle}"
							Grid.Column="1">	
														
							<i:Interaction.Triggers>
								<i:EventTrigger EventName="MouseEnter">
									<ei:ControlStoryboardAction x:Name="FullScreen" Storyboard="{StaticResource ImageFull}"/>
								</i:EventTrigger>
								<i:EventTrigger EventName="MouseLeave">
									<ei:ControlStoryboardAction x:Name="NormalScreen" Storyboard="{StaticResource ImageNormal}"/>
								</i:EventTrigger>
							</i:Interaction.Triggers>	
														
							<Border x:Name="border" Width="550" Height="413" Style="{StaticResource Bildrahmen}">								
								<Image x:Name="image" Stretch="Uniform" Source="123.JPG" />
							</Border>								
						</Button>	

Und den Code der Storyboard Resource:


		<Storyboard x:Name="ImageFull">
			<DoubleAnimation Duration="0:0:1" To="1024" Storyboard.TargetProperty="(FrameworkElement.Width)" Storyboard.TargetName="border" d:IsOptimized="True"/>
			<DoubleAnimation Duration="0:0:1" To="768" Storyboard.TargetProperty="(FrameworkElement.Height)" Storyboard.TargetName="border" d:IsOptimized="True"/>
		</Storyboard>		
		<Storyboard x:Name="ImageNormal">
			<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Width)" Storyboard.TargetName="border">
				<EasingDoubleKeyFrame KeyTime="0" Value="1024"/>
				<EasingDoubleKeyFrame KeyTime="0:0:1" Value="550"/>
			</DoubleAnimationUsingKeyFrames>
			<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Height)" Storyboard.TargetName="border">
				<EasingDoubleKeyFrame KeyTime="0" Value="768"/>
				<EasingDoubleKeyFrame KeyTime="0:0:1" Value="413"/>
			</DoubleAnimationUsingKeyFrames>
		</Storyboard>

Danke nochmal Gü, für den Hinweiß.

Grüße Stephan

01.08.2010 - 23:37 Uhr

Hallo Gü,

ja ich habe mir Blend 4 geleistet 😃 Muss ich mich mal auf suche begeben, wie das geht mit dem Behavior.

Im moment löse ich das auch so, das ich das Storyboard in der Codebehind starte. Dachte aber, das muss ja auch so gehen, denn es wird ja immer gesagt, das man im XAML weniger im Code machen muss, da man sehr vieles auch im XAML direkt machen kann.

Forsche dann mal im Blend 😉
Danke noch für den Hinweiß.

Grüße Stephan

01.08.2010 - 23:24 Uhr

Leider habt ihr mich falsch verstanden, wer kennt es nicht auf den normalen websites, lästige Werbung wird angezeigt, ein Werbe-layer scheint in Vordergrund, leider wird dies im webBrowser unterbunden, oder bin ich zu blöd?

Genau das sind die Seiten, was Tomot gemeint hat 😃
Auf solchen Homepages verweile ich mich in der regel solange, wie mein Browser braucht, bis ich wieder in Google und den nächsten ergebnissen bin.

Also lass es am besten bleiben, User mit störenden einblendungen zu nerven.
1-2 kleine Werbebanner kann man noch vertreten, aber sicher nicht, wenn eine Seite zu mehr als 50% aus Werbung besteht und dann noch so nervtötende Dinger kommen, die man weg klicken muss.

Grüße Stephan

01.08.2010 - 23:17 Uhr

Hallo zusammen,

ich habe mal wieder ein kleines Problem, bei dem ich etwas hänge und nicht mehr weiter weiß.


						<Button Name="button" 
							Style="{StaticResource customButtonStyle}"
							Grid.Column="1">	
							<Button.Triggers>
								<EventTrigger RoutedEvent="button.Click">
									<BeginStoryboard>
										<Storyboard>
											<DoubleAnimation Duration="0:0:1" To="1024" 
															 Storyboard.TargetProperty="(FrameworkElement.Width)" 
															 Storyboard.TargetName="border" 
															 d:IsOptimized="True"/>
											<DoubleAnimation Duration="0:0:1" To="768" 
															 Storyboard.TargetProperty="(FrameworkElement.Height)" 
															 Storyboard.TargetName="border" 
															 d:IsOptimized="True"/>
										</Storyboard>
									</BeginStoryboard>
								</EventTrigger>
							</Button.Triggers>							
							<Border x:Name="border" Width="550" Height="413" Style="{StaticResource Bildrahmen}">								
								<Image x:Name="image" Stretch="Uniform" Source="123.JPG" />
							</Border>								
						</Button>	

Folgendes Problem. Das hier scheint nicht zu funktionieren: RoutedEvent="button.Click".

Ziel was ich erreiche möchte, das das Storyboard ausgeführt wird, wenn der Button geklickt wird.

Leider hab ich noch kein Buch zu Silverlight bzw WPF/XAML, das mir da weiter helfen kann, aber beides steht ganz oben auf der Liste und wird Ende des Monats gekauft werden. Solange versuche ich mich so schon mal in die Materie einzuarbeiten.

Wenn Ihr mir da kurz meinen gedanklichen Fehler sagt, und wie ich das beheben, umgehen kann, wäre ich sehr dankbar.

Grüße Stephan

31.07.2010 - 17:44 Uhr

Hallo malignate,

danke für den Link. Werde ich mir mal durchlesen.
War eher zufall, das mir das aufgefallen ist, da ich schnell mal ein Bild nachladen wollte.

Grüße Stephan

30.07.2010 - 19:45 Uhr

Hallo zusammen,

ich versuche gerade ein Bild von einer anderen Homepage Quelle in Silverlight 4 nachzuladen.

Wenn ich die Silverlight Anwendung im Browser ausführe bekomme ich folgende Sicherheits Fehlermeldung:

System.Security.SecurityException ---> System.Security.SecurityException: Sicherheitsfehler bei System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult) bei System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClass5.<EndGetResponse>b__4(Object sendState) bei System.Net.Browser.AsyncHelper.<>c__DisplayClass2.<BeginOnUI>b__0(Object sendState) --- Ende der internen Ausnahmestapelüberwachung --- bei System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state) bei System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) bei System.Net.WebClient.GetWebResponse(WebRequest request, IAsyncResult result) bei System.Net.WebClient.OpenReadAsyncCallback(IAsyncResult result)

Wenn ich die Silverlight Anwendung Out-of-Browser ausführe, mit erhöhten Rechten klappt es, was ja auch klar ist, wegen den Rechten dann.

Wie kann ich das beheben, oder welche einschränkungen gibt es da?

Hier mal noch den Code, wie ich das Bild nachlade:


        void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
        {
			try
			{
            	Stream stream = e.Result;
            	BitmapImage img = new BitmapImage();
            	img.SetSource(stream);
            	image.Source = img;
            }
			catch (Exception ex)
			{
				MessageBox.Show(ex.InnerException.ToString());	
			}
        }

		private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
		{
			WebClient client = new WebClient();
            client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);
            client.OpenReadAsync(new Uri("http://www.fremde-domain.de/images/image.jpg", UriKind.RelativeOrAbsolute));
		}

Grüße Stephan

29.07.2010 - 20:36 Uhr

Der Dienst soll mitloggen, ob bzw. wann die Monitore eingeschaltet sind (zur Energieüberwachung).

Meinem Windows ist es wurscht ob ich den Monitor an habe.
Darum sage ich mal, ist dein Ansatz der Energieüberwachung durch einen Dienst auf dem PC am Ziel meilenweit vorbei geschossen.
Um Verbraucher zu überwachen gibt es andere Methoden, welche aber nicht in einem C# Programm und auf einem Rechner zu finden sind.

Man muss dazu die Stromaufnahme der Verbraucher messen "Wie es das Kraftwerk auch macht" und dies gemessenen Werte kann man dann wieder Visualiseren, wenn man die Digitalisiert hat.

Weiß jetzt nicht, in welchem Umfang Du das betreiben möchtest.
Aber folgenden Link kann ich Dir mal anbieten Energiemanagment .

Grüße Stephan

28.07.2010 - 00:10 Uhr

Hallo Gü,

Das werde ich. Das Programm hat schon einen festen Shurtcut bekommen in meiner Taskleiste 😃

Grüße Stephan

28.07.2010 - 00:01 Uhr

Hallo Gü,

danke noch für die Erklärungen und die beiden Links.
Hab die Seiten zwar nur mal eben überflogen, aber was ich gesehen habe, finde ich schon informativ.

Im moment spiele ich gerade mit dem LinqPad und der AdventureWorks Datenbank rum. Das Programm ist ja mal spitze 🙂
So kann ich mich an die Syntax und den praktischen nutzen heran tasten.

Grüße Stephan

27.07.2010 - 22:43 Uhr

Hallo zero_x,

Das Verstehen und das Anwenden von LINQ sind aber wiederrum zwei Paar Schuhe.

Verstanden hab ich meines erachtens Linq schon. Nur eben den Sinnvollen Einsatz dann zu finden, und auch die sinnvolle Query, das wird mein harter brocken werden. Gut auch das lernt man.

Hallo Michael,

Da du wahrscheinlich ein Anfänger bei LINQ bist, empfehle ich dir LinqPad zu benutzen.

Das wird auch in dem Buch empfohlen. Hatte mir das bis jetzt noch nicht angesehen, was ich aber noch machen werde. Danke aber noch für den Hinweis. Dann muss das Programm was taugen 😉

Eine 2. frage hab ich dann noch passend zu dem Thema.
Kennt Ihr Literatur zu den Lambda ausdrücken, die ich mir ansehen sollte?
Denn wenn ich so einen ausdruck sehe, dann erschließt sich mir das noch nicht so richtig, den Lambda zu intepretieren. Der mag ja jetzt sicher einfach sein, aber der wird auch in meinem Buch beschrieben was der macht 🙂

IEnumerable<string> query = names.Where((n, i) => i % 2 == 0);

Grüße Stephan

27.07.2010 - 22:23 Uhr

Hallo Timur Zanager,

ich will ja auch nicht in die richtung fragen, was ich erwarten muss, bis ich Linq behersche.
Mir geht es rein um das persönliche empfinden, was Ihr gehabt habt, bis Ihr sagen konntet, ich kann mit Linq effektiv umgehen.

Für mich persönlich sieht die Syntax ein wenig danach aus, als wäre mein Kater über die Tastatur gelaufen. Gerade die Lambda ausdrücke 😃

Finde das eben ein wenig gewöhnungsbedürftig.

Grüße Stephan

27.07.2010 - 22:16 Uhr

Hallo zusammen,

wollte mal in die Runde fragen, wie lange Ihr gebraucht habt um mit Linq richtig umzugehen.

Ich hab mir ein kleines Büchlein gekauft "Linq - Kurz und gut" und bin das am studieren.
Dabei eröffnen sich einem ja ungeahnte Möglichkeiten. Von daher frage ich mich geade, wie lange man wohl brauchen wird, bis man die Syntax und die Fallen beherscht und sinnvoll einsetzen kann.

Grüße Stephan

27.07.2010 - 21:41 Uhr

Hallo zusammen,

Wow. Das ging aber schnell mit dem Umzug 🙂
War gestern abend schon sehr überrascht als ich um 20 Uhr an Rechner gesessen bin und die meldung gelesen hatte.

Super Arbeit von euch allen. Nun macht das Surfen im Forum noch mehr spaß 🙂

Grüße Stephan

26.07.2010 - 01:12 Uhr

Hallo,

hier noch 2 Links, mit denen Du deinem Fehler auf die schliche kommen wirst:

[FAQ] Kommunikation von 2 Forms
[FAQ] Eigenen Event definieren / Information zu Events

Ansonsten bleibt nur zu sagen [Hinweis] Wie poste ich richtig? 1.1.1

Grüße Stephan

25.07.2010 - 22:04 Uhr

Hallo meffke,

Wie kann ich nun aus einem UC ein anderes UC aufrufen. Funktionieren müßte es doch irgendwie über den Parent.

Die lösung sind Events.
Dein UC löst ein Event aus, welche deine MainForm verarbeitet und dementsprechend dann die neue UC lädt.

[FAQ] Kommunikation von 2 Forms
[FAQ] Eigenen Event definieren / Information zu Events

Grüße Stephan

25.07.2010 - 21:54 Uhr

Hallo baer999,

ich würde das mal mit dem SqlDataAdapter.RowUpdated-Event versuchen.

Grüße Stephan

25.07.2010 - 20:19 Uhr

Hallo Johny B,

Was meinst du mit Form_Load Event? (sry aber bin echt newbie^^)

Dachte ich kann einfach nach "InitializeComponent(); auf die Methode home_Click() zugreifen.

Will jetzt nicht gemein wirken. Aber so gesehen fehlen Dir massiv Grundlagen, welche Du dir erst einmal mit einem Buch aneignen solltest.

Hier mal ein paar Links dazu:
Galileo OpenBook "Visual C# 2008" 🛈Guide to C# 📗[Hinweis] Bitte schau in die SDK-/MSDN-Doku :rtfm:

Wenn Du dann ein bestimmtes Problem haben solltest, bei dem Du hängst, wird Dir hier sicher schnell weiter geholfen.

Zu deinem Problem:


public Webbrowser()
        {
           InitializeComponent();
           // home_Click();  // falsch
           Home();
        }

private void home_Click(object sender, EventArgs e)
        {
            Home();
            
        }

private void Home()
{
      Browser.Navigate("http://www.google.at");
      Adressfeld.Text = "http://www.google.at";
}

Das sollte zumindest mal dein jetziges Problem lösen.

Grüße Stephan

24.07.2010 - 21:40 Uhr

Hallo Tott,

links in dem TreeView steht doch ganz oben Anwendungspools.
Wäre doch denkbar, das genau dort sich ein Anwendungspool für genau diese Site versteckt 😉

Grüße Stephan

24.07.2010 - 19:59 Uhr

Ich vermute, dass ich dieses Verhalten irgendwo im IIS konfigurieren kann. Nur leider weiß ich nicht wo und wie. Hat irgendwer einen Tip für mich?

Silverlight läuft im Context des Browser, also dem Rechner des User und nicht auf dem Server.
Daher sollte dort der Fehler zu finden sein.

Sind dort eventuell GroupPolicys aktiv?

Grüße Stephan

24.07.2010 - 19:53 Uhr

Hallo Tott,

ist ganz einfach. Du kannst das im Anwendungspool des IIS7.5 einstellen.
Doppelklick drauf und das Menu wird sich zeigen 😃

Grüße Stephan

23.07.2010 - 22:08 Uhr

Nabend zusammen,

Versuch das Ganze mal mit INotifyPropertyChanged und/oder ObservableCollections.

Das hatte ich auch schon versucht, aber ging nicht.

Ich hab aber die Lösung gefunden.

Man muss die Daten in einer Klasse unterbringen die folgend aussieht:


public class Hersteller
{
     public Int32 HerstellerId { get; set; }
     public string HerstellerName { get; set; }
     public ObservableCollection<Variante> Varianten { get; set; }
}

public class Variante
{
     public Int32 VarianteId { get; set; }
     public string VarianteName { get; set; }
}

Das kann man dann an die comboBox1 im DataContext binden und damit dann im XAML Code nutzen.
In der comboBox2 sagt man dann im ItemsSource="{Binding ElementName=comboBox1, Path=SelectedItem}" .

Gruß Stephan

22.07.2010 - 18:41 Uhr

Hallo TheGear,

bin zwar jetzt nicht der Profi in WPF, da ich selbst noch am lernen bin.
Aber du kannst dich an eine Eigenschaft eines Controls folgend binden:

<Popup IsEnabled="{Binding ElementName=NameDesControl, Path=IsToolTipEnabled}" ... </Popup>

Dabei ist ElementName der Name des Control von dem Du den Wert übernehmen möchtest und Path die Eigenschaft davon.

Hoffe das hilft.

Grüße Stephan

21.07.2010 - 20:41 Uhr

Hallo zusammen,

ich habe ein Problem mit meinen ComboBoxen in Silverlight 4 und bin am verzweifeln, da ich nicht heraus finde wo der Fehler ist.
Im Internet hab ich schon gesucht, aber alles was ich finde, basiert auf 1 ComboBox.

Folgendes Szenario:
Es gibt 2 ComboBoxen. In der ComboBox1 werden Hersteller eingefügt. Die ComboBox2 soll dann Varianten bekommen, in abhängigkeit vom dem gewählten Hersteller.

Im moment habe ich das folgend aufgebaut:
in der XAML Datei definiere ich 2 ComboBoxen, welche ich dann im Backend fülle.
Die ComboBox1 binde ich an eine List<Hersteller> was mir die Einträge auch korrekt anzeigt.
Im SelectionChanged-Event der ComboBox1 lade ich dann aus der Datenbank die Varianten der Hersteller nach und fülle damit auch eine List<HerstellerVariante> und binde die an die ComboBox2.ItemsSource.

Nun das Problem. Die ComboBox 2 wird zwar dann befüllt, aber genau nur 1x.
Danach ändert sich nicht an den Einträgen mehr.
Ich habe schon geprüft ob die List<HerstellerVariante> auch richtig gefüllt wird, was es auch tut.

Wo hab ich da einen Denkfehler?
Oder kennt jemand eine Seite, wo genau so ein szenario erklärt wird?


public class HerstellerVariante
{
     public int ID { get; set; }
     public string Value { get; set; }
}

Grüße Stephan

20.07.2010 - 22:20 Uhr

Hallo zusammen,

ich habe mal eine Frage zu meinem Entwurf einer Nested Class.

Folgende Ausgangssituation soll gegeben sein.
Es gibt eine Form, die diverse Daten erfassen soll. Die Form soll nicht Modal laufen. In der Form soll es einen Button geben, der einen Event wirft, wenn man Daten erfasst hat und möchte diese dann verarbeiten lassen.

Hier mal exemplarische Daten, wie ich das aufgebaut habe:


    public class OuterClass : Form
    {
        private InnerDataClass innerClass = new InnerDataClass();

        public InnerDataClass InnerClass
        {
            get { return innerClass; }
        }

        public class InnerDataClass
        {
            public string ValueString;
            public int ValueInt;
        }

        public void DoSomething()
        {
            // Do Something 
            MethodeAddInnerClassValues("Ich bin ein String Value", 1);
            // Do Something
        }

        private void MethodeAddInnerClassValues(string valueString, int valueInt)
        {
            innerClass.ValueString = valueString;
            innerClass.ValueInt = valueInt;
        }
    }

Und aufrufen möchte ich das in etwa dieser Form:


    OuterClass o = new OuterClass();
    o.DoSomething();
    o.Show();
    // ...
    MessageBox.Show(o.InnerClass.ValueString);
    // ...

Wobei das alles rein exemplarischer Code ist, welcher keine bedeutung hat. Mir geht es rein um die Implementierung der Nested Class.

Nun meine Fragen.
Habe ich die Nested Class da richtig implementiert, oder begebe ich mich damit auf dünnes Eis und kann irgendwann einbrechen.

Wie kann es sein, das ich eine Nested Class nicht aufrufen kann, wenn ich die Classe und die Felder darin statisch mache. Ich meine, das eine Instanz einer Klasse nicht eine Statische Klasse ansprechen kann. Im Internet hab ich folgendes gefunden A Tutorial on Nested Classes in C#.
Aber so richtig hat mir das nicht geholfen. Ich vermute aber, das es dort geht, weil die Main Methode ja auch statisch ist. Bin mir dem ganzen aber noch nicht ganz sicher.

Grüße Stephan

05.07.2010 - 22:22 Uhr

Hallo Peter,

Englisch ist so ein Problem, denn sagen wir mal so, die chance besteht 50/50, dass ich den Text auch richtig verstehe.
Aber ich habe mir den Link mal gespeichert und werde mir das mal durchlesen, oder besser gesagt versuchen, was sicher ein wenig länger dauert 😃

Aber danke noch.

Grüße Stephan

05.07.2010 - 22:12 Uhr

Was mache ich da falsch? Die Loginseite muss ja erreichbar sein.

Kannst Du denn die Login.aspx direkt im Browser aufrufen?
Ich würde ansonsten mal die Datei Rechte prüfen.

Grüße Stephan

05.07.2010 - 20:18 Uhr

Hallo FZelle und Peter Bucher,

@FZelle,
es kann durchaus sein, das ich dass noch nicht ganz zuordnen kann. Aber gerade das versuche ich ja zu lernen. Sicher mag es manchen so vor kommen, als würde ich manchmal nicht so recht voran kommen, aber ich muss dazu sagen, das ich alles rein als Hobby mache. Okay es soll sicher irgendwann mal was dabei raus kommen ( WebAnwendung usw ) welches gehobene Ansprüche hat, aber ich lasse mir dabei auch Zeit und versuche das von Anfang an richtig zu entwickeln.

@Peter Bucher,
Wenn ich mir die Kommentare von Dir und FZelle so durchlese, dann ist das, was ich einsetze ein DI ( Dependency Injection ) Container.

Die kommentare von euch beiden, haben mich aber nochmal ein bisschen weiter gebracht, um die DI/IoC zu verstehen, wenn auch sicher nur einen kleinen Teil.

Trotzdem noch vielen Dank an euch allen.
Ist immer wieder sehr informativ, wenn man so kleine nebeninfos bekommt.

Grüße Stephan

05.07.2010 - 00:42 Uhr

Hallo FZelle,

danke noch für das Stichwort. Da kommen ja massig Informationen bei Google, wo ich mich dann einlesen kann.

Grüße Stephan

04.07.2010 - 23:16 Uhr

Hallo zusammen,

lieber spät als Nie antworten.
Aber ich muss gestehen, das ich selbst nicht nachvollziehen kann, was ich da vor hatte. Auf jedenfall ist das so nicht machbar gewesen, was ich oben beschreibe.

Ich nutze nun den IoC um damit meine Business Objekte anzusprechen ( zB Logging ). Daran dürfte ja nichts verwerfliches sein, wenn man seine Business Objekte durch einen IoC verwaltet?.

Ich taste mich eben gerade ein wenig an die Technik ran, wie ich mein Projekt richtig realisieren kann.

Grüße Stephan

04.07.2010 - 23:10 Uhr

Hallo LuckyStrike,

Dadurch müsste doch sichergestellt sein, dass niemand unbefugt auf den Handler zugreifen kann. Hatte zuerst den Dateinamen in der URL übergeben, dann konnte man aber bspw. einfach Rechnung_21.pdf eingeben und hat die Rechnung eines anderen Kunden bekommen.

Ich habe zwar jetzt noch nie selbst einen HttpHandler implementiert, aber ich meine das dies der falsche ansatz ist, was Du da machst.
Schaue Dir mal folgendes Beispiel aus der MSDN an: Gewusst wie: Erstellen von synchronen HTTP-Handlern.

Um den Download zu sichern würde ich über die Session und einer Guid gehen. Speichere die Guid in der Session und übermittel diese dann beim aufruf des Handler. Dann kannst Du in deinem HttpHandler die übergebene mit der in der Session gespeicherte vergleichen und nur wenn die identisch ist das Dokument zurück geben.

Grüße Stephan

04.07.2010 - 22:58 Uhr

Hallo LuckyStrike,

Ziel ist es aber eigentlich keine einzelnen Benutzer in die Web.config zu schreiben, sondern das ganze über Rollen zu steuern.

Dann schaue Dir mal den MembershipProvider und RoleProvider an.

Du kannst Dir auch einen eigenen Membership und Role Provider schreiben, der dann an deine speziellen bedürfnisse angepasst ist. So schwer ist das nicht, hauptsächlich fleißarbeit.

Grüße Stephan

02.07.2010 - 22:43 Uhr

Hallo el_panther,

würde etwas dagegensprechen eine Exeption im getter des propertys zu werfen wenn das null ist?

Prinzipiell würde da erstmal nix dagegen sprechen. Mit einer ausnahme, wie im anderen Thread im Beispiel zu sehen, formatiere ich das Dictionary zu einer List<string> um. Dann müsste ich dort aber wieder über die Propertys das auslesen, was den Code in dem Falle aufbläht.

Aber ich habe einen Denkfehler gefunden. Ich muss bei der Eingabe der Daten die Prüfung schon machen, denn schlussendlich sollte dem Anwender ja an sinnvoller stelle eine Meldung um die Ohren fliegen, wenn etwas nicht gesetzt wurde.

Das beispiel der Klasse im anderen Thread ist ja nur der Datenträger, um damit die Daten von einer Stelle zur anderen im Lifecycle zu transportieren.

Grüße Stephan

02.07.2010 - 21:19 Uhr

Nabend zusammen,

basierend auf folgenden Thread Praxis Frage: Klasse als Datenspeicher hab ich noch eine Frage.

Wie kann ich es realisieren, das ein Property immer gesetzt wurde?
In der MSDN hab ich das RequiredAttribute-Klasse gefunden, aber damit komme ich nicht weiter.

Ich möchte, das eine Exception geflogen kommt, wenn ein Property nicht gesetzt wurde, welches für die Verarbeitung zwingend erforderlich ist.

Gibt es da noch ein anderes Attribute was man dafür verwenden kann?

Grüße Stephan

02.07.2010 - 19:31 Uhr

Hallo zusammen,

Wie soll dir die Klasse eigentlich bei einem HttpRequest helfen?

Folgender Ablauf soll damit realisiert werden:
Ich halte mir eine Instanz einer Settings Business Klasse in der Session ( da diese Angaben darin so allgemein sind, das diese nicht bei jedem Request neu geladen werden müssen ).
Innerhalb der Settings Klasse erstelle ich eine Datenklasse für die MetaTag Angaben der einzelnen Pages, die ich dann gleich mit den Grunddaten wie Robots, Author usw füllen kann.
Dann hab ich eine Basisklasse geschrieben, welche von System.Web.UI.Page erbt und verwende die bei den ganzen xxx.aspx Seiten.
Innerhalb einer *.aspx Seite können dann noch Daten wie Description, Keywords eingefügt werden.
Danach packe ich die MetaData Klasse dann in den HttpContext und lese die dann in der MasterPage wieder aus dem HttpContext. Dort werden dann die Meta Angaben dem Html zugefügt.

@MarsStein:
Danke noch für die Ausführungen. Denke mal. das ich da noch ein wenig erfahrung sammeln muss, wann und wo man gegen Interfaces Programmieren muss. Bei meinen Business Objekten brauche ich ja auf jedenfall ein Interface, da ich die in einen Unity Container gepackt habe.

01.07.2010 - 23:26 Uhr

Hallo MarsStein,

Interfaces haben IMHO nur dann Sinn, wenn verschiedene Implementierungen der Interfacemember in verschiedenen implementierenden Klassen zu erwarten sind und die jeweils benutzte Klasse nicht genau bekannt ist.

Dann habe ich wohl so manche Kommentare im Forum falsch verstanden, wenn gesagt wird "Und immer gegen Interfaces implementieren". Okay, dein Argument macht sinn.

Was seltsam erscheint, ist daß man zwar Daten als Object hinzufügen kann, aber nie wieder als Object herausbekommt, sondern lediglich als String. Spätestens an dieser Stelle wird die Klasse so speziell, daß ein Interface IMHO wirklich keinen Sinn mehr macht.

Wenn man das Beispiel nun erweitert, das man Int oder Enum Werte speichern möchte, dann geht das doch nicht anders. Hatte das Beispiel in dem falle etwas schlecht gewählt, das ich nur 2 String rein stecke.

Grüße Stephan

01.07.2010 - 22:39 Uhr

warum möchtest du plötzlich die Daten als List<String> zurück geben?

Ich gehe in dem Beispiel ja alle Datensätze des Dictionary durch und formatiere die zu einem String um String.Format("Key: {0} Value: {1}", item.Key, item.Value);.
Dann reicht es ja aus, wenn ich die in eine List<string> packe um diese dann zurück zu geben. Nur mal als Beispiel: Wenn man damit ein Control füllen möchte, welches die Daten in einer Liste benötigt ( hab da aber im moment kein konkretes im Kopf, wo das in der Form sinn machen würd. Sollte auch nur Pseudocode sein. )

Das Dictionary hab ich gewählt, da ich über die Getter/Setter der Property und einer Konstante das so am übersichtlichsten speichern und zugreifen kann im über das Property.
Wie ich im Eingangspost geschrieben habe, kann ich damit das prüfen gegen NULL etc vermeiden, was der lesbarkeit ( aus meiner sichtweise ) zugute kommen sollte.

Übrigens bezüglich gutem Stil, Denglisch ist keiner. "GetAllDaten" solltest du eher "GetAllData" nennen.

In meinem Projekt versuche ich soweit mein Englisch das unterstützt auch rein in Englisch zu schreiben. Dort würde dann natürlich GetAllData stehen.

01.07.2010 - 22:02 Uhr

Hallo zusammen,

hoffe der Titel ist einigermaßen aussagekräftig, was ich hier gewählt habe.

Ich versuche meinen Stil zu verbessern, und damit eingehend auch gut lesbaren Code zu schreiben.

Folgender Code soll mal als Basis genommen werden für meine Fragen am schluss:


public interface IDatenklasse
{
    string Eigenschaft1 { get; set; }
    string Eigenschaft2 { get; set; }
    List<string> GetAllDaten();
}

public class Datenklasse : IDatenklasse
{
    private Dictionary<string, object> _dicDaten;

    private const string c_Konstante1 = "Ich bin eine Konstante";
    private const string c_Konstante2 = "Und ich bin eine andere";

    public Datenklasse()
    {
        _dicDaten = new Dictionary<string,object>();
    }

    public string Eigenschaft1
    {
        get { return GetValue(c_Konstante1).ToString(); }
        set { AddValue(c_Konstante1, value); }
    }

    public string Eigenschaft2
    {
        get { return GetValue(c_Konstante2).ToString(); }
        set { AddValue(c_Konstante2, value); }
    }

    private void AddValue(string key, object value)
    {
        if(_dicDaten.ContainsKey(key))
        {
            _dicDaten[key] = value;
        }
        else
        {
            _dicDaten.Add(key, value);
        }
    }

    private object GetValue(string key)
    {
        if (_dicDaten.ContainsKey(key))
        {
            return _dicDaten[key];
        }
        return null;
    }

    // Methode soll alle Daten die in dem Dictionary 
    // gespeichert sind formatiert zurück geben
    public List<string> GetAllDaten()
    {
        List<string> dataList = new List<string>();
        foreach (var item in _dicDaten)
        {
            dataList.Add(String.Format("Key: {0}, Value: {1}", item.Key, item.Value));
        }
        return dataList;
    }
}

1.Gegen ein Interface zu Programmieren ist ja immer sinnvoll. Macht es auch sinn, eine reine Datenklasse gegen ein Interface zu binden, die nichts anderes machen soll, als Daten zu speichern um diese zwischen Methoden zu transportieren? 1.Ist es in ordnung, wenn man in einer Datenklasse eine Methode bereit stellt, die Daten aufbereiten soll und wie im Beispiel dann als eine List<T> zurück gibt? 1.Findet Ihr den Aufbau der Klasse so in Ordnung? Anregungen nehme ich da gerne an.

Bitte die Datenklasse nicht falsch verstehen. Die soll nur dazu dienen in einem HttpRequest Daten über den HttpContext zu transportieren. Die Klasse soll zu keinem Zeitpunkt als Singleton Instanz oder sowas ähnliches im Speicher gehalten werden.

Es kann sich bei dem Fall um 1..n Datensätze handeln. Darum habe ich auch die Variante mit dem Dictionary mir ausgedacht, da ich darüber dann sehr schnell wieder alle Datensätze die gespeichert wurden abrufen kann, ohne jeden Datensatz gegen String.Empty oder NULL zu prüfen.

Würde mich nun sehr freuen, wenn Ihr mir da meine Fragen beantwortet. Und wie gesagt, ich nehme gerne noch ein paar Anregungen und natürlich verbesserungen ( sollte ich auf lange sich mit so einem entwurf an die Wand fahren ) an.

Grüße Stephan

29.06.2010 - 22:44 Uhr

Nabend zusammen,

wollte mal eben euch Experten zu meiner Idee befragen, wie Ihr diese findet.

Erst einmal ein wenig Hintergrund:
Ich habe eine Klasse, welche HTML MetaTag Angaben im Lifecycle halten soll.
Dann hab ich eine Klasse mit allgemeinen Settings Werten, die generell in einer Session vorhanden sein sollen ( Mir reicht, wenn änderungen dieser Daten bei neuen Sessions aus der Datenbank gelesen werden).

Folgendes habe ich nun vor:
Ich habe einen Unity IoC Container integriert, welcher ich in der Global.asax im Application_Start erstelle.
Nun möchte ich, mittels diesem Container eine Klasse zur verwaltung der Settings und MetaTag Daten bereit stellen. Diese Klasse sollte dann ja innerhalb der Aplication Laufzeit immer vorhanden sein.

Konkret soll das nun so von statten gehen. Wenn eine neue Session erstellt wird, soll in der Global.asax dann die Settings Klasse mit der SessionID als Key in einem Dictionary in der Verwaltungsklasse registriert werden. Danach kann ich dann ja an jedem Punkt über die SessionID wieder genau diese Instanz auslesen und verwenden. Wenn eine Session beendet, kann ich die Instanz dann ja in Application_EndSession wieder löschen.

Punkt 2 MetaTag Daten. Auch die MetaTag Klasse soll in der Verwaltungsklasse registriert werden. Aber genau solange wie ein Request stattfindet. Also will ich die in der Application_BeginRequest in der Global.asax auch wieder registrieren. Nachdem dann der Request beendet wurde, soll in der Application_EndRequest die Instanz wieder gelöscht werden.

Würdet Ihr allgemein gesehen so vorgehen? Der genaue Hintergrund was ich damit erreichen möchte ist ein wenig schwer zu erklären. Kurz gesagt, ich suche eine möglichkeit beim eintritt eines Request die MetaDaten mit allgemeingültigen Werten vorzubelegen, welche aber aus der Settings Klasse kommen sollen ( So sollten da bei jedem Seitenaufruf nicht immer wieder Datenbank Abfragen stattfinden ) aber die Session ist noch nicht vorhanden, wenn ein User neu auf die Seite kommt und noch keine Session hatte. Somit ist dann auch eine Referenz auf die Instanz der Settings Klasse noch nicht in der Session vorhanden, wenn ich die in der Session speichere.

Wie gesagt, ist ein wenig um mehrere Ecken, was ich da erreichen möchte.

Grüße Stephan

23.06.2010 - 22:59 Uhr

Du könntest auch einfach eine WebAnwendung und keine WebSite erstellen.
Dann kommt da nix mehr von den *.cs Dateien im IIS an.

Grüße Stephan

14.06.2010 - 18:35 Uhr

Nabend zusammen,

Eigentlich stört das doch auch nicht...
Mir ist das z.B. noch gar nicht aufgefallen, da ich erst gar nicht daran denke, direkt auf ein Control eines anderen Fensters zuzugreifen.

Stören tut mich das auch nicht, da ich mir angewöhnt habe über Properties, Methoden und Events zu kommunizieren.

Mir ist das nur aufgefallen, als ich durch Intellisens gezappt bin nach dem Property Namen.

Trotzdem frage ich mich, warum MS das so gemacht hat.
Schlussendlich wird damit ja auch wieder ein unwissender Programmierer dazu verleitet die Controls dire´kt anzuprechen.

Grüße Stephan

13.06.2010 - 22:33 Uhr

Man man... Deutschland hat gewonnen und schon machen die als wäre Deutschland schon im Finale 😃

Kann dem alles nix abgewinnen. Ist mir zu kommerziell was Fußball angeht.

12.06.2010 - 01:31 Uhr

Hallo zusammen,
wie der Titel schon besagt, frage ich mich gerade, warum in einem WPF Window die Controls ( TextBox etc ) public sind.

Mir ist das gerade zufällig aufgefallen, als ich einen Property gesucht hatte welches ich beim öffnen des Window übergeben wollte, das die Controls da auch drinne stehen.

Hier mal zum verdeutlichen, wie ich die das Fenster lade. Könnte ja auch sein, das mein gedanke da schon falsch ist.


        private void Button_Click(object sender, RoutedEventArgs e)
        {
            MyWindow myWindow = new MyWindow();
            myWindow.EinePropertie = "Mein Text";
            myWindow.textBoxEingabe.Text = "Dieser Text geht, und steht im Control";
            myWindow.Show();            
        }

Warum sind da die Controls nun Public? Ich frage mich das gerade, da man bei WindowsForms ja fast gesteinigt wird, wenn man die Controls Public machen würde.

Grüße Stephan

09.06.2010 - 20:45 Uhr

Also meiner Ansicht nach Blockiert die Ausgabe das Einlesen der Daten. Wahrscheinlich weil das DGV mit zunehmender Anzahl der Zeilen mehr Zeit oder RAM oder sonst was braucht

Ich schieß mal ins Blaue. Aber ich denke mal, das deine vermutung mit der Zeit stimmt.
Ein DGV "DataGridView" ist eine anzeigende Komponente, welche nicht die Daten speichern sollte, sondern nur einen gewissen Anteil der gesamten Datenmenge.
Speichere die Daten in einem DataSet, und lade daraus Seitenweise die Daten zur Anzeige ins DGV rein.

Grüße Stephan

08.06.2010 - 22:51 Uhr

Bei Serverausfällen gibt es eine Kulanz von 10 Tagen in denen die Lizenz weiterläuft, somit haben die Kunden kaum Regressanspruchsmöglichkeiten, da innerhalb von 10 Tagen jeder Server gefixt sein sollte.

Will ja jetzt nicht den schwarzen Peter an die Wand malen. Aber gehe mal davon aus, was eventuell passieren kann, wenn besagter Kunde den Server trotzdem nicht erreichen kann, da es ja durchaus auch passieren kann/könnte, das der Server zwar einwandfrei läuft, aber durch dumme umstände das Internet bei besagtem Kunde nicht geht.

Man darf ja nicht zwangsläufig davon ausgehen, das immer jedes Unternehmen eine Internet Verbindung hat, aber der Betrieb weiter gehen muss.

Genauso verhält sich das mit privaten Kunden. Wer sagt Dir, das besagter Rechner, welcher die Software betreiben soll, auch zugriff auf das Internet hat.
Es gibt durchaus leute, die 2 Rechner bei sich stehen haben. 1 Internet Rechner und einen für den Rest, wo keinen zugriff auf das Internet hat.
Was willst Du dann machen?

Ich denke, wie herbivore auch, das es besser ist, von solchen zwängen abstand zu nehmen. Zumindest wollte ich selbst dies auch nicht haben, das mich eine Software am Samstag morgen, nachdem ich meine Netzwerkkarte tauschen musste ( defekt ) auffordert einen neuen Key zu beantragen.... etc....

Grüße Stephan

06.06.2010 - 18:00 Uhr

Hallo metacircle,

wie wäre es, wenn Du den Size vor dem Maximieren in einer Variable speicherst?
So kannste dann diese Size Values Serialisieren.

ich würde mir da wahrscheinlich eine kleine Klasse schreiben, in die ich dann alle Values hinterlege, und diese dann im Settings abspeichern.

Grüße Stephan

06.06.2010 - 17:01 Uhr

Hallo Meisteralex,

ich denke wohl eher nicht, das Du solche Studien irgendwo frei auf einem Server im Internet rum liegen finden wirst.
Denn bekanntlich werden Studien von Firmen beauftragt, die sich durch die Studie einen vorteil verschaffen möchte.

Aber die Punkte, was WinSharp93 angesprochen hat, sehe ich schon mal als essentiell an, wo man durchaus beherzigen kann und sollte.

Grüße Stephan