Laden...

Forenbeiträge von Sarc Ingesamt 417 Beiträge

28.03.2013 - 21:35 Uhr

Hallo,

das kann man schon so machen.
Eleganter wäre es allerdings, wenn du den Wert im Konstruktor übergibst, dann reicht ein einfacher getter aus.
Das geht natürlich nur, wenn dein Anwendungsfall das erlaubt, d.h. wenn du bei der Objekterzeugung den Wert schon kennst.

28.03.2013 - 14:18 Uhr

Hallo,

so ganz habe ich das Problem noch nicht verstanden, evtl. kannst du es näher umschreiben.
Wenn du einen Member hast, der von aussen nicht geändert werden darf, wäre das doch der klassische Fall für ein Property, das nur einen getter besitzt.

25.03.2013 - 12:15 Uhr

Hallo,

das äußerste Grid, müsste ja auch im VisualTree vor allen anderen Grids kommen. Dann solltest du über den VisualTreeHelper an das erste Grid rankommen, z.B. mit folgender Methode:

public static T FindChild<T>(DependencyObject o)
	where T : DependencyObject
{
	if (o is T)
		return (T)o;

	var childCount = VisualTreeHelper.GetChildrenCount(o);

	for (int i = 0; i < childCount; i++)
	{
		var child = VisualTreeHelper.GetChild(o, i);
		var result = FindChild<T>(child);

		if (result != null)
			return result;
	}
	return null;
}

Verwendung:

Window MeinFenster = (Window)sender;
var outerGrid = FindChild<System.Windows.Controls.Grid>(MeinFenster);
22.03.2013 - 20:10 Uhr

Hallo,

was aus dem obigen Link nicht hervorgeht und für deinen Anwendungsfall brauchbar ist, ist die Implementierung des IComparator<T> Interfaces, da du ja keinen eigenen Datentyp, sondern nur Strings hast.

Hier ein vereinfachtes Beispiel (ungetestet und ohne Berücksichtigung von null-Werten):

public class CustomComparator : IComparer<string>
{
	public int Compare(string x, string y)
	{
		if (string.Equals(x, y))
			return 0;

		var xIndex = 0;
		var yIndex = 0;

		if (x.StartsWith("D", StringComparison.InvariantCultureIgnoreCase))
			xIndex = 1;

		if (y.StartsWith("D", StringComparison.InvariantCultureIgnoreCase))
			yIndex = 1;

		if (xIndex == yIndex)
			return int.Parse(x.Substring(xIndex)).CompareTo(int.Parse(y.Substring(yIndex)));

		if (xIndex < yIndex)
			return -1;

		return 1;
	}
}

Edit: Achja, und dann natürlich die Verwendung des Comparators:

var values = ... // your string items
var orderedValues = values.OrderBy(f => f, new CustomComparator());

21.03.2013 - 21:57 Uhr

Du kannst bei der Felddefinition noch nicht auf die Methode zugreifen.
Pack doch einfach die Thread-Erzeugung in den Konstruktor. Du musst den Thread ohnehin noch starten, damit überhaupt was passiert:

public partial class Kontaktliste : Window
{
	Thread t;

	public Kontaktliste()
	{
		this.t = new Thread(DoSomething);
		this.t.Start();
	}
	private void DoSomething()
    {
    
    }
}
21.03.2013 - 21:47 Uhr

Zeig doch mal den Code der den Fehler produziert, ansonsten können wir nur raten wo der Fehler liegt.

21.03.2013 - 21:36 Uhr

Hallo,

deine Grundannahme dass Threads statisch sein müssen ist nicht korrekt.
Du kannst von der Klasse Thread so viele Objekte erzeugen wie du willst. Diese können dann auch dementsprechend auf die Objekte zugreifen, die sich im jeweiligen Kontext befinden.

Beispiel:


public class Foo
{
	private Socket socket;
	
	public void Bar()
	{
		Thread t = new Thread(DoSomething);
		t.Start();
	}
	
	private void DoSomething()
	{
		this.socket.Connect(...);
	}
}

Oder wo genau ist das Problem?

20.03.2013 - 19:14 Uhr

Hallo,

so wie ich folgendes lese, geht das was du vorhast nicht mit PDFSharp:
http://www.pdfsharp.net/wiki/PDFsharpFAQ.ashx

Aber es gibt ja noch andere PDF-Libs die das können.

10.03.2013 - 19:20 Uhr

Hallo,

ich denke das lässt sich pauschal nicht sagen. Wie verwendest du den Service bisher?
Im Sinne einer späteren Austauschbarkeit des Services, wäre die Auslagerung in eine statische Klasse bzw. statische Methoden kontraproduktiv.
Bis jetzt haben andere Klassen ja eine direkte Abhängigkeit zu genau diesem Service. Evtl. wäre es für deinen Anwendungsfall sinnvoll, dass die anderen Klassen nur eine Abhängigkeit zu einer Schnittstelle haben, welche dein Service implementiert. Dann liesse sich der Service leicht austauschen, was auch die Testbarkeit verbessern würde. Statische Methoden sind halt - naja - immer sehr statisch und unflexibel.

08.03.2013 - 22:22 Uhr

Hallo,

in der MSDN steht ja zum BackgroundWorker, dass jede Operation in einem neuen Thread ausgeführt wird: BackgroundWorker Class

Ich sitze hier schon ne weile an einem Threading problem.

Was genau ist denn das Problem bzw. was funktioniert nicht?

08.03.2013 - 20:52 Uhr

sieht nicht so aus als wäre es installiert. Gehe auf "Tools -> Erweiterungen und Updates" und such in der Visual Studio Gallery nach "Nuget", dann findest du den "Nuget Package Manger". Dann diesen installieren, dann müsste es passen.

08.03.2013 - 20:36 Uhr

Hallo,

im deutschen VS müsste es etwa hier sein: "Ansicht -> Andere Fenster -> Package Manager Konsole"

08.03.2013 - 19:59 Uhr

Hallo,

REM ist doch vom Typ long, wieso erwartest du an dieser Position dann einen String?

08.03.2013 - 19:44 Uhr

Hallo,

in MVC-Webprojekten ist es immer eingebunden, für Webforms weiss ich es nicht.
Ansonsten, öffne einfach die Package-Manager Console und lad es dir herunter via:

Install-Package jQuery
07.03.2013 - 12:41 Uhr

Hallo,

statt:

|| r.Office.Bezeichnung.Contains(searchText)

das:

|| (r.Office != null && r.Office.Bezeichnung.Contains(searchText))
27.02.2013 - 20:22 Uhr

Du liegst falsch Sarc.

Nö. Du hast als CultureInfo "en-US" verwendet, wodurch der erste Tag der Woche auf Sonntag fällt, was für die deutsche Datumsberechnung unbrauchbar ist.

Es scheint aber in der Tat so zu sein, dass die Implementierung von GetWeekOfYear nicht ISO 8601 kompatibel ist (siehe ISO 8601 Week of Year format in Microsoft .Net).
Nimm einfach die dort gezeigte Methode und gut is. (PS: die Methode verwendet zwar eine invariante Culture, setzt aber explizit als "FirstDayOfWeek" den Montag).
Das hättest du aber locker auch über Google finden können...

27.02.2013 - 15:44 Uhr

Oder habe ich etwas übersehen?

Ja, und zwar die korrekte CultureInfo. Du musst schon die deutsche CultureInfo verwenden, ansonsten hat z.B. culture.DateTimeFormat.FirstDayOfWeek den Wert "Sonntag" und nicht "Montag". Dadurch ergibts sich dann auch eine andere KW.
Deutsche CultureInfo:

var culture = CultureInfo.GetCultureInfo("de");
26.02.2013 - 18:35 Uhr

@herbivore: Hast du eine Quelle, die das von dir angesprochene Verhalten von lock{} dokumentiert?
Ich habe nur folgende Meinungen gefunden, die nicht für eine garantierte Reihenfolge sprechen

Does lock() guarantee acquired in order requested?
Is the C# lock statement FIFO? (first come first serve)

26.02.2013 - 13:33 Uhr

Hallo,

ein normales lock{} sollte für deinen Fall ausreichen. Es ist aber schlecht, dass deine Felder öffentlich sind und daher jederzeit von aussen unkontrollierbar verändert werden können.
Ich kenne den konkreten Anwendungsfall nicht, aber evtl. macht es hier Sinn, die Wertzuweisung irgendwo zentral vorzunehmen, damit du dort deine Sperrung einbauen kannst.
Du könntest z.b. die Wertänderungen und das Senden der Daten als Action (Command) ansehen und deren Ausführung zentralisieren und dann dort locken, z.b. so:

class Program
{
	static void Main(string[] args)
	{
		var obj = new MyData();
		obj.Test = "test";

		Executer.Execute(obj, x => x.Test = "New value");
		Executer.Execute(obj, x =>
			{
				// send data via ethernet...
			});
	}
}

public static class Executer
{
	private static readonly object locko = new object();

	public static void Execute(MyData obj, Action<MyData> action)
	{
		lock (locko)
		{
			action(obj);
		}
	}
}

public class MyData
{
	public string Test { get; set; }
}

Dann müssen natürlich auch alle Wertzuweisungen darüber erfolgen. Sobald ein Thread direkt auf ein Feld/Property zugreift, wird der Mechanismus umgangen.

Wenn die Reihenfolge der Schreibvorgänge, die während des Sendens eingehen und aufgrund des locks warten müssen, eine Rolle spielt, dann musst du dich zusätzlich noch mit einer Queue drum kümmern, dass die eingehenden Schreibvorgänge auch der Reihe nach bearbeitet werden. lock{} stellt eine sortierung nicht sicher, soweit ich weiss.

22.02.2013 - 21:33 Uhr

Hallo,

du könntest z.B. die Google-API verwenden um die Bildersuche programmatisch anzusteuern (https://developers.google.com/custom-search/v1/overview). Allerdings sind hier nur 100 Queries pro Tag kostenlos.

Ein anderer Ansatz wäre über den WebClient, z.B. wie hier: http://www.codeproject.com/Articles/85847/HTML-DOM-Using-NET
Wobei hier das nachladen der Bilder wie es bei Google-Images gemacht wird, nicht berücksichtigt wird.

18.02.2013 - 11:05 Uhr

Hi,

hier eine Möglichkeit in Anlehnung an https://gist.github.com/refractalize/1751260:

class Program
{
	static void Main(string[] args)
	{
		var xml = "<Data><Liste><Key1>Daten</Key1><Key2>andere Daten</Key2><KeyN>ganz andere Daten</KeyN><Mopped>Irgendwelche Daten</Mopped></Liste></Data>";
		var ser = new XmlSerializer(typeof(Data));
		var d = (Data)ser.Deserialize(new StringReader(xml));
	}
}

[XmlRoot("Data")]
public class Data
{
	[XmlElement("Liste")]
	public Liste List { get; set; }

	public class Liste
	{
		[XmlIgnore]
		public Dictionary<string, string> Properties = new Dictionary<string, string>();

		[XmlAnyElement]
		public XElement[] XmlProperties
		{
			get
			{
				return Properties.Select(entry => new XElement(entry.Key, entry.Value)).ToArray();
			}
			set
			{
				Properties = value.ToDictionary(el => el.Name.LocalName, el => el.Value);
			}
		}
	}
}
07.02.2013 - 14:22 Uhr

Hallo Karill Endusa,

mit Gefrickel meinte ich die Daten an die Textbox zu senden. Die Einbindung von AutoIt in C# ist kein Problem.

07.02.2013 - 12:55 Uhr

Hallo,

wenn die Software die du ansprechen willst, in sich geschlossen und nicht anpassbar ist, dann denke ich gibt es keine "charmante" Lösung.
Ein Lösungsansatz wäre eine Automatisierung mittels AutoIt in Verbindung mit C#. Dann könntest du deine FallID über die AutoIt API an das Fenster (bzw. die Textbox) des Ursprungprogramms senden. Ist aber ein Gefrickel.

01.02.2013 - 18:41 Uhr

Hallo,

links neben dem "Minimieren"-Button in Snoop ist ein Fadenkreuz.
Einfach draufklicken und gedrückthalten und dann über dem entsprechenden WPF Fenster loslassen.
Oder wie der Tooltip auf English lautet: "Drag and drop this crosshairs over a WPF window in order to Snoop it."

29.01.2013 - 19:28 Uhr

Hallo,

das Problem ist hier die Code Optimierung.
Nimm in den Projekteinstellungen das "Optimize code" raus, dann wirds klappen.
Das Verhalten lässt sich in einem Test-Projekt leicht nachstellen:

class Program
{
	static void Main(string[] args)
	{
		var ng = Settings.Default.DebugPluginId ? Settings.Default.LoadDebugPlugin : (Guid?)null;
		var x = ng != null;

		Console.Write(x);
	}
}

Im Falle der Code Optimierung macht der Compiler folgendes aus obigen Code:

bool x = !(Settings.Default.DebugPluginId ? new Guid?(Settings.Default.LoadDebugPlugin) : null).HasValue;
Console.Write(x);

Du sieht den Wert der Variable "ng" beim Debuggen nicht, da es sie ja eigentlich gar nicht gibt im Code.
Wenn du optimize code aktiviert hast und z.b. einen Breakpoint in der Zeile "var x = ng != null;" setzt, dann ist hier "ng" noch null. Sobald du über die Zeile stepst, hat "ng" den echten Wert.

21.12.2012 - 13:35 Uhr

Hallo,

also die Begrifflichkeiten Blackbox- und Whitebox Test passen nicht zu deinem Vorhaben. Du willst ja kaum beim Kunden eine dieser Testarten durchführen. Diese Testarten sind vor Auslieferung der Software sinnvoll.
Was du vorhast klingt eher nach Logging.

10.11.2012 - 21:06 Uhr

Über das Deserialize des Formatters bekommst du ja immer ein object. Das musst du halt dann entsprechend casten.

10.11.2012 - 20:41 Uhr

Also wenns dir nur um serialisieren geht und du das übergebene objekt nicht anderweitig auswertest, dann nimm doch einfach als Parametertyp object:

public static void SerializeObject(object o)

Dann kannst du da jeden beliebigen typ übergeben.

10.11.2012 - 20:36 Uhr

Hallo,

wie sieht denn deine Lösung aus (quelltext)?
Sollte in etwa so funktionieren (ungetestet):

List<byte> binaryContent = ...; // deine binären Daten
binaryContent.Insert(0, Encoding.GetBytes("@" + binaryContent.Count + "@")); // länge vorne anfügen
var base64Message = Convert.ToBase64String(binaryContent.ToArray());

Diesen string sendest du dann an den server.

31.10.2012 - 15:16 Uhr

Ich denke du suchst die Klasse MemoryStream. Erzeug dir ein neues Objekt davon und schreibe den Inhalt da rein und verwende diesen Stream später für das Attachment.

25.10.2012 - 12:10 Uhr

Die Instanzierung eines neuen Objektes macht hier keinen Sinn, da du das Objekt ja aus dem Array erhältst.
Schau dir im Objektkatalog doch einfach an, welche Member/Properties das Objekt Bapiessr bereitstellt bzw. verwende Intellisense aus Visual Studio (falls vorhanden).
Dann könnte es etwa so aussehen:

Bapiessr firstItem = response.EntrysheetHeader[0];
var id = firstItem.id;
var date = firstItem.date;
...

25.10.2012 - 11:53 Uhr

Hallo,

ich verstehe das Problem wohl nicht ganz. Aber du erhältst doch vom Webservice Aufruf ein Array mit Bapiessr-Objekten. Damit kannst du doch durch das Array iterieren und auf die einzelnen Member der Bapiessr-Objekte zugreifen.

07.09.2012 - 11:52 Uhr

Hallo,

du könntest im Fehlerfall so etwas versuchen:


catch (WebException ex)
{
    var response = (HttpWebResponse)ex.Response;
...
}

06.09.2012 - 11:34 Uhr

okay, und wie genau soll das gehen ?

Z.b. so:

context.Table.Select(f => f.Name)
23.08.2012 - 12:00 Uhr

Wieso nimmst du nicht einfach den WebClient oder den ExtendedWebClient (WebClient mit HTTP-POST- und Cookie-Unterstützung) und schickst eine einfache POST-Anfrage mit den jeweiligen Daten?
Finde ich in dem Fall einfacher als die Verwendung des WebBrowser-Controls.

20.08.2012 - 09:25 Uhr

Vielleicht noch interessant für alle die Dreamspark Premium (MSDNAA) nutzen:
Windows 8 und VS 2012 sind ab 24. August 2012 erhältlich. Quelle: Windows 8 ab 24. August über DreamSpark Premium

23.07.2012 - 13:14 Uhr

Unabhängig von deinem "if"-Problem, wäre es evtl. sinnvoller das ganze mittels Extension-Methods auszulagern, falls du nicht tiefgreifende Änderungen in Dictionary<> vornehmen musst, z. B. so:

public static class DictionaryExtensions
{
	public static bool RowExist<K,V>(this Dictionary<K,V> d)
	{
		return d.Count > 0;
	}
}
18.07.2012 - 11:57 Uhr

Hallo,

dein Typ für oM und oN ist identisch oder?
Dann erstell dir doch einen IEqualityComparer<> und verwende diesen in der .Distinct()-Methode.
In der Equals-Methode vergleichst du dann einfach deine 3 Attribute.

05.07.2012 - 11:50 Uhr

Hallo,

klar hast du dann eine Veränderung im Laufzeitverhalten, was ja ganz einfach an einem Beispiel zu beweisen ist:

class Program
{
	static void Main(string[] args)
	{
		A x = new B();
		x.DoIt();
	}
}

public class A
{
	public void DoIt()
	{
		Console.WriteLine("A");
	}
}

public class B : A
{
	public void DoIt()
	{
		Console.WriteLine("B");
	}
}

Das ist dein momentaner Stand, welcher hier die DoIt()-Methode von Klasse A aufrufen würde. Nach deiner Änderung mittels override wird die DoIt()-Methode von B aufgerufen.

26.06.2012 - 15:19 Uhr

Hallo herbivore,

ich denke ein erster Ansatzpunkt sind statistische Schätzverfahren, insbesondere die Maximum-Likelihood-Methode.

20.06.2012 - 12:21 Uhr

Achso, ok. Da du ja nicht auf den generischen Typ casten kannst (da nicht bekannt), bleibt ja nur das IDictionary-Interface:

var dict = (IDictionary)f.GetValue(o);
var resultDict = new Dictionary<Guid,object>();

foreach(var key in dict.Keys)
{
  resultDict.Add( (Guid)key, dict[key] );
}

So in der Art.

20.06.2012 - 12:10 Uhr

Direkt über einen Cast wird es nicht funktionieren. Du musst dir ein neues Dictionary<Guid,object> erstellen und dieses mit den Werten des deserialisierten Dictionaries füllen.

20.06.2012 - 11:19 Uhr

Weil Dictionary<Guid,MyObject> != Dictionary<Guid,object> ist.
Du musst im Cast schon Dictionary<Guid,MyObject> verwenden.

30.05.2012 - 19:54 Uhr

'voksneu' ist 'List<Vokabel>' (aber unwichtig)

Ganz unwichtig ist das nicht. Wenn du als Datenstruktur eine HashSet<> anstelle einer List<> nimmst, dann brauchst du deinen if-Anweisung nicht mehr, sofern du die Equals- und GetHashCode-Methode der Vokabel-Klasse überschrieben hast.
Ein ähnliches Problem mit Duplikaten hatten wir erst heute: [erledigt] Eigene Objekte als Key in Dictionary (keine doppelten)

30.05.2012 - 11:52 Uhr

Ich versteh nicht ganz was die '+'-Zeichen da verloren haben...

30.05.2012 - 10:35 Uhr

Hallo,

Du musst die Equals und GetHashCode-Methode von Entry überschreiben. Dann erhältst du eine Exception, sobald ein doppelter Key hinzugefügt wird.
Alternativ kannst du dir einen IEqualityComparer<Entry> bauen, welcher dann im Konstruktor des Dictionaries übergeben werden muss.

24.05.2012 - 11:25 Uhr

Funktioniert über GetOleDbSchemaTable:
http://support.microsoft.com/kb/309488

24.05.2012 - 10:42 Uhr

Erster Treffer bei der Suche nach "vs 2010 show statusbar"...
The Ultimate Visual Studio Tips and Tricks Blog: Hide the Status Bar

23.05.2012 - 10:05 Uhr

Hallo,

wie wärs mit Debugging?
Wird die Bedingung aus der ReadMessage überhaupt erfüllt?