Laden...
dN!3L
myCSharp.de - Experte
130
Themen
2.891
Beiträge
Letzte Aktivität
vor einem Jahr
Dabei seit
13.08.2004
Erstellt vor 7 Jahren

Z.B. nach dem InitializeComponent();
Den Rest bekommst du sicherlich alleine hin...

Erstellt vor 7 Jahren

Das mit der Erweiterungsmethode kannst du erstmal vergessen, wenn dir das nichts sagt. Nicht schlimm.

Du rufst irgendwo in deinem Programm SetWebbrowserVersion(deineWebBrowserControlInstanz) auf, oder?

Erstellt vor 7 Jahren

Das this ist drin, da das bei mir eine Erweiterungsmethode ist. Wenn du die Methode in eine statische Klasse packst, funktioniert es mit this und du kannst direkt webBrowserControl1.SetWebbrowserVersion() aufrufen.

Du musst irgendwann noch SetWebbrowserVersion aufrufen (und dein WebBrowserControl übergeben). Hast du das gemacht?

Das Ergebnis ist dann z.B. (übrigens: Nachdem du einmal SetWebbrowserVersion aufgerufen, kannst du den Effekt nur rückgängig machen, indem du den angelegten Registry-Wert wieder manuell löscht oder den Namen deiner EXE-Datei änderst)

Erstellt vor 7 Jahren

Die Control.Dock-Eigenschaft (oder ein TableLayoutPanel) kennst du, oder?
Pixelgenau selbst solltest du die Steuerelemente nicht selbst platzieren - da gibt es viel zu viele Sachen, die das später blöd aussehen lassen können (Schriftarten, DPI-Skalierung, ...)

Erstellt vor 7 Jahren

Wenn ich dein Problem richtig verstehe, sollte folgender Code weiterhelfen (einfach einmal für ein WebBroserControl aufrufen, gilt dann für den ganzen Prozess):


/// <summary>
/// Aktiviert die aktuellen InternetExplorer-Features für das WebBrowser-Control
/// </summary>
public static void SetWebbrowserVersion(this WebBrowser webBrowser)
{ 
	int registryValue = (webBrowser.Version.Major>=11) ? 11001 : (webBrowser.Version.Major==10) ? 10001 : (webBrowser.Version.Major==9) ? 9999 : (webBrowser.Version.Major==8) ? 8888 : 7000;
	string registryKeyPath = @"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION";
	using (RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(registryKeyPath,true) ?? Registry.CurrentUser.CreateSubKey(registryKeyPath))
		registryKey.SetValue(Process.GetCurrentProcess().ProcessName + ".exe",registryValue,RegistryValueKind.DWord);
}

In diesem Zusammenhang vll. auch noch interessant:


/// <summary>
/// Beschränkt die Persistenz von Cookies im WebBrowser-Control auf den aktuellen Prozess
/// </summary>
public static unsafe void SuppressWininetBehavior(this WebBrowser webBrowser)
{
	int option = (int)3/* INTERNET_SUPPRESS_COOKIE_PERSIST*/;
	int* optionPtr = &option;

	if (!InternetSetOption(0,81/*INTERNET_OPTION_SUPPRESS_BEHAVIOR*/,new IntPtr(optionPtr),sizeof(int)))
		throw new Exception("Something went wrong !>?");
}
[DllImport("wininet.dll",CharSet = CharSet.Auto,SetLastError = true)]
private static extern bool InternetSetOption(int hInternet,int dwOption,IntPtr lpBuffer,int dwBufferLength);

Erstellt vor 10 Jahren

Das nächste Treffen findet am Donnerstag, den 11.12.2014, ab 18.30 Uhr statt.


[B]PostSharp[/B]

Im Entwickleralltag kommen zu den spezifischen Kundenanforderungen immer noch allgemeine Vorgaben z.B. Überwachung hinzu. Aspektorientierte Programmierung ist ein Ansatz um diese Vorgaben strukturiert und einfach zu erfüllen. Mit PostSharp steht dem .Net Entwickler ein Framework zur Implementierung von AOP zu Verfügung.
 
In diesem Vortrag werden die allgemeinen Grundlagen beleuchtet und die Wirkungsweise bzw. die Einsatzzwecke von PostSharp 3 vorgestellt. In praktischen Beispielen werden neben klassischen Anwendungsfällen wie Logging auch weitergehende Verwendungen wie UI-Manipulationen und sicheres Multithreading gezeigt. Hinzu kommt die Nutzung von PostSharp zur Überwachung von Architekturrichtlinien. Ein Ausblick auf die neue Version 4 rundet das Thema ab.

Referent: [i]Frank Pommerening[/i]

Eine Anmeldung ist unbedingt erforderlich. Die Anzahl der Teilnehmer ist auf 25 Personen begrenzt. Auf der Anmeldeseite wird auch angezeigt, wie viele Plätze noch frei sind.

Die Kosten des Abends werden wir mit voraussichtlich 3,- EUR wie gewöhnlich auf die Teilnehmer umlegen (Achtung: Außer Getränken gibt es keine Verpflegung).

Veranstaltungsort:
BBT Group GmbH, Bernburger Str. 30/31, 10963 Berlin

www.dotnetbb.de

Erstellt vor 10 Jahren

Das nächste Treffen findet am Donnerstag, den 13.11.2014, ab 18.30 Uhr statt.


[B]Xamarin[/B]

Xamarin ermöglicht die Entwicklung von iOS, Android, Mac und Windows Apps mit .NET. 
Xamarin bietet ein einheitliches Tooling für alle Platformen und man kann mit C# in jeden AppStore der Welt verteten sein.
Jede Platform ist 100% in C# abgedeckt und ermöglicht so den Zugriff auf alle platformspezifischen Features. 
Dadurch sind .NET Apps nicht von native Apps zu unterscheiden. 

Es wird einen Überblick über die Xamarin Tools geben und eine Demonstration in App-Entwicklung.
 
Referent: [i]Mike Krüger[/i]

Eine Anmeldung ist unbedingt erforderlich. Die Anzahl der Teilnehmer ist auf 25 Personen begrenzt. Auf der Anmeldeseite wird auch angezeigt, wie viele Plätze noch frei sind.

Die Kosten des Abends werden wir mit voraussichtlich 3,- EUR wie gewöhnlich auf die Teilnehmer umlegen (Achtung: Außer Getränken gibt es keine Verpflegung).

Veranstaltungsort:
BBT Group GmbH, Bernburger Str. 30/31, 10963 Berlin

www.dotnetbb.de

Erstellt vor 10 Jahren

Es sollte auch nicht als Gegenargument herhalten. Ist viel mehr ein "nett gedacht aber total blöd umgesetzt".

Hier mal ein konkretes Beispiel für das Weglassen von MessageBoxen: Es gibt einen "Speichern (unter)"-Dialog für Datenquellen-Abfragen. Sobald man auf "Speichern" klickt und es eine Abfrage mit gleichem Namen schon gibt, kam die modale Nachfrage, ob man denn die existierende Abfrage überschreiben möchte (Ja, Nein, Abbrechen). Das ist allerdings ziemlich nervig, wenn man immer wieder speichert - denn die Antwort ist stets "Ja".
Ich habe den Dialog dann so umgebaut, dass einfach ein farblich auffälliger hinterlegter Hinweistext eingeblendet wird. Beim Klick auf "Speichern" wird die bestehende Abfrage einfach überschrieben. Da die alten Versionen eh erhalten bleiben (es gibt Versionierung) ist das im Endeffekt auch nicht so schlimm. Wieder unnötige Klicks gespart 😉

Erstellt vor 10 Jahren

Ein sehr schlechtes Beispiel für den Einsatz nicht modaler Dialoge habe ich neulich bei einer Präsentation gesehen. Es ging gerade darum, wie man das Format von URLs anpassen kann. Das Resultat einer Codeänderung war ähnlich dem Screenshot von unten - Es sollte eine bestimmte Adresse aufgerufen werden, aber - obwohl eigentlich alles korrekt umgesetzt worden war - hat man nur ein "Not Found" gesehen. Auch nach mehrmaligem Aufrufen sah man kein Ergebnis.
Das Problem dabei war, dass schon alles einwandfrei funktioniert hat. Allerdings zeigt der Internet Explorer bestimmte Inhaltstypen nicht an, sondern blendet den "Speichern oder Öffnen"-Dialog ein - in dem Fall nicht modal ganz am unteren Rand. Die "Not Found"-Seite ist das Resultat irgendeiner Aktion davor. Alle haben nur auf die Adresszeile geguckt und (vermeintlich) einen 404 als Ergebnis gesehen. Dabei hätte man auf den Hinweis ganz unten gucken müssen.

Erstellt vor 10 Jahren

Wenn du die Klassen eh schon generiert hast, wozu verwendest du dann noch die VS-Dienstverweise? Die brauchst du dann ja eigentlich nicht mehr.

Für die Verbindung zu Webservices erstelle ich mir immer manuell mit dem svcutil die entsprechenden Klassen und Konfigurationen und verzichte auf die VS-Dienstverweise. Da kannst du dann auch flexibel den generierten Code anpassen, ohne der Gefahr zu unterlaufen, dass der Code wieder überschrieben wird.

10 von 2.891 Beiträgen